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

时间:2014-04-25 14:06:23

标签: php laravel administration

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

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

3 个答案:

答案 0 :(得分:24)

这确实是一个广泛的问题,一个答案不能涵盖管理员控制器或后端管理的最佳实践,但有一些基本概念可用于构建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(创建,读取,更新,删除)在资源丰富的路由声明示例中使用resourceful controller,例如UserController

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

始终使用命名路由,即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()
    {
        //...
    }
}

还有更多,但它足以开始,在线阅读文章,必须阅读documentation

答案 1 :(得分:2)

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

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

如果我提议的那个太复杂,你也可以自己制作。

甚至有一个&#34; laravel-ready&#34;哨兵版。

答案 2 :(得分:0)

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

实施例: 控制器:

应用程序/控制器/管理/管理*姓名* Controller.php这样 应用程序/控制器/现场/ *姓名* Controller.php这样

查看: 应用程序/视图/管理/ some_folder /index.blade.php 应用程序/视图/站点/ some_folder /index.blade.php

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

祝你好运。