在Laravel 4中创建管理员界面的最佳实践


Best practice for creating administrator interface in Laravel 4

我想为我的Laravel项目创建一个管理员界面,它与用户端完全分离。

例如,在Yii框架中,我可以制作一个模块,这将确保与用户端完全分离。在模块内部,我可以使用单独的文件夹结构等。

这确实是一个宽泛的问题,一个答案不能涵盖管理控制器或后端管理的所有最佳实践,但构建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

使用存储库类(存储库模式)来解耦依赖关系,请阅读本文。

始终使用命名路由,即array('as' => 'routename', 'uses' => 'SomeController@method'),这是命名路由的示例。命名路由很容易引用,即return Redirect::route('admin.home')将重定向到site.com/admin,因为我们在as中使用了admin.home来分配该路由的名称。

将管理控制器放在一个单独的文件夹中,并使用namespace。例如,Admin''DashBoardController@index控制器应该在app/controllers/admin中,而您的DashBoardController控制器应该如下所示:

<?php namespace Admin;
class DashBoardController extends 'BaseController {
    public function index()
    {
        //...
    }
}

还有更多,但从一开始就足够了,在线阅读文章,必须阅读文档。

如果您熟悉composer,您可以导入包(也称为模块)

有一个广泛可用的具有多级接口的模块,已经被称为Sentry 2.0:https://github.com/cartalyst/sentry

如果需要的话,如果我建议的太复杂,你也可以自己做。

甚至还有一个"laravel ready"版本的哨兵。

我使用的目录结构与您希望在我的大多数(如果不是全部的话)Laravel项目中使用的相同。基本上,我将管理视图和管理控制器与前端视图和控制器分开。

示例:控制器:

app/controllers/admin/admin*名称*Controller.phpapp/controllers/site/*名称*Controller.php

视图:app/views/admin/some_folder/index.blade.phpapp/views/site/some_folder/index.blade.php

我还建议你安装这个laravel项目https://github.com/andrewelkins/Laravel-4-Bootstrap-Starter-Site这将为如何在你的laravel项目中组织事情提供一个很好的开端。它还具有与您想要使用的文件夹结构相同的文件夹结构。

祝你好运。