Лучшая практика для создания интерфейса администратора в Laravel 4

Я хотел бы создать интерфейс администратора для моего проекта Laravel, полностью отделенный от пользовательской стороны.

Например, в Yii framework я могу сделать модуль и это обеспечит полное отделение от пользовательской стороны. Внутри модуля я могу использовать отдельную структуру папок и т.д.


person Nagy Ervin    schedule 25.04.2014    source источник
comment
Это может помочь: packtpub.com/article/   -  person HeroFTime    schedule 25.04.2014


Ответы (3)


Это действительно широкий вопрос, и один ответ не может охватить все, что касается передового опыта для контроллеров администратора или управления серверной частью, но есть некоторые основные концепции для создания Admin Panel:

// Keep all of your admin routes inside something like this
Route::group(array('prefix'=> 'admin', 'before' => 'auth.admin'), function() {

    // Show Dashboard (url: http://yoursite.com/admin)
    Route::get('/', array('uses' => 'Admin\\DashBoardController@index', 'as' => 'admin.home'));

    // Resource Controller for user management, nested so it needs to be relative
    Route::resource('users', 'Admin\\UserController');

});

// Other routes (Non-Admin)
Route::get('login', array('uses' => 'AuthController@showLogin' 'as' => 'login'));

Используя prefix, вы можете разделить все маршруты администратора, чьи url будут иметь префикс admin, поэтому, если у вас есть контроллер users для управления пользователями в бэкэнде, то url будет иметь префикс admin, т.е. site.com/admin/users. Также с помощью фильтра before вы можете добавить аутентификацию для всех контроллеров администратора в одном месте, это означает, что для доступа ко всем вашим контроллерам администратора пользователь должен войти в систему, и фильтр может быть примерно таким:

Route::filter('auth.admin', function($route, $request, $args){
    // Check if the user is logged in, if not redirect to login url
    if (Auth::guest()) return Redirect::guest('login');

    // Check user type admin/general etc
    if (Auth::user()->type != 'admin') return Redirect::to('/'); // home
});

Для CRUD (создание, чтение, обновление, удаление) используйте контроллер ресурсов, например, UserController в пример находчивого объявления маршрута.

Используйте классы репозитория (Repository Pattern) для разделения зависимостей, прочитайте эту статью.

Всегда используйте именованный маршрут, например array('as' => 'routename', 'uses' => 'SomeController@method'), это пример именования маршрута. На именованные маршруты легко ссылаться, т. е. return Redirect::route('admin.home') будет перенаправлять на site.com/admin, потому что мы использовали admin.home в as для присвоения имени этому маршруту.

Держите контроллеры администратора в отдельной папке и используйте namespace, например, Admin\\DashBoardController@index контроллер должен быть в app/controllers/admin, а ваш DashBoardController контроллер должен выглядеть так:

<?php namespace Admin;

class DashBoardController extends \BaseController {
    public function index()
    {
        //...
    }
}

Есть еще, но для начала достаточно прочитать статьи в Интернете и обязательно прочитать документацию.

person The Alpha    schedule 25.04.2014
comment
Я думаю, как и \Basecontroller, мне нужно будет включить все вспомогательные функции, такие как Request, View и т. Д., В зависимости от того, что требуется в методе контроллера, иначе будет выдана ошибка, например, класс Request ничего не нашел. Как выйти из этой проблемы? - person neeraj; 08.12.2014
comment
Да, если используется namespace, вам нужно использовать оператор ` or add use` в верхней части класса, например use Request;. - person The Alpha; 08.12.2014
comment
Я нашел еще один лучший способ — просто хранить все ваши контроллеры в папке администратора и автоматически загружать их в composer.json, тогда в этом случае не нужно будет использовать пространство имен или добавлять помощников вручную. - person neeraj; 08.12.2014

Если вы знакомы с композитором, вы можете импортировать его в пакеты (модули).

Существует широко доступный модуль с многоуровневым интерфейсом, который уже называется Sentry 2.0: https://github.com/cartalyst/sentry< /а>

Вы также можете сделать свой собственный, если это необходимо, если тот, который я предлагаю, слишком сложен.

Существует даже «готовая к laravel» версия sentry.

person azngunit81    schedule 25.04.2014
comment
к сожалению, я не знаком с композитором, но я хотел бы изучить/использовать его. Спасибо - person Nagy Ervin; 25.04.2014
comment
ну, это ваш основной способ получить Laravel. Ознакомьтесь с отличным руководством по развертыванию Laravel от Джеффри Уэя laracasts.com/lessons/laravel-installation-for-newbs - он показывает вам композитор - так как с этого момента вы должны начать знакомиться с ним, если вы хотите продвинуться в лучшем программировании и не изобретать велосипед. - person azngunit81; 25.04.2014

Я использую ту же структуру каталогов, которую вы хотели бы использовать в большинстве (если не во всех) моих проектах Laravel. По сути, я держу представления администратора и контроллеры администратора отдельно от интерфейсных.

Примеры: Контроллеры:

app/controllers/admin/Admin*Name*Controller.php app/controllers/site/*Name*Controller.php

Представления: app/views/admin/some_folder/index.blade.php app/views/site/some_folder/index.blade.php

Я также предлагаю вам установить этот проект laravel https://github.com/andrewelkins/Laravel-4-Bootstrap-Starter-Site, который даст очень хорошее начало тому, как организовать вещи в вашем проекте laravel. Он также имеет ту же структуру папок, которую вы хотели бы использовать.

Удачи.

person Keith Mifsud    schedule 25.04.2014