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

9
我想为我的Laravel项目创建一个管理员界面,该界面与用户侧完全分开。
例如,在Yii框架中,我可以创建一个模块,这将确保完全与用户侧分离。在模块内部,我可以使用单独的文件夹结构等。

这可能会有所帮助:http://www.packtpub.com/article/laravel4-creating-a-simple-crud-application-in-hours - Noman Ghani
3个回答

24

这确实是一个广泛的问题,一个答案无法涵盖有关管理控制器或后端管理的所有最佳实践,但在构建管理员面板时有一些基本概念:

// 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'));

通过使用前缀,您可以将所有管理路由分离出来,其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,因为我们在as中使用了admin.home来指定该路由的名称。

将管理员控制器放在单独的文件夹中,并使用namespace,例如:Admin\\DashBoardController@index 控制器应位于 app/controllers/admin,您的DashBoardController 控制器应如下所示:

<?php namespace Admin;

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

还有更多内容,不过这些已经足够开始了。在网上阅读文章,并且务必阅读文档


我认为像\BaseController一样,我将不得不在控制器方法中包括所有需要的辅助程序,例如Request、View等,否则会出现错误,如 "找不到Request类"。如何解决这个问题? - Neeraj
是的,如果使用了 namespace,那么您需要在类的顶部使用 \ 或添加 use Request; 语句。 - The Alpha
我发现另一种最好的方法是将所有控制器放在admin文件夹中,并将它们自动加载到composer.json中,这样就不需要手动使用命名空间或添加帮助程序。 - Neeraj

2
如果您熟悉composer,您可以导入包(也称为模块)。
已经有一个名为Sentry 2.0的多级接口模块广泛可用: https://github.com/cartalyst/sentry 如果我提出的这个太复杂了,您也可以自己制作。
甚至还有一个“laravel-ready”版本的sentry。

很不幸,我不熟悉Composer,但我想学习/使用它。谢谢。 - Nagy Ervin
这是获取Laravel的主要方式。请查看Jeffrey Way的出色的Laravel部署教程https://laracasts.com/lessons/laravel-installation-for-newbs - 它向您展示了Composer。从现在开始,如果您想在更好的编程方面取得进步并且不想重复造轮子,那么您应该开始熟悉它。 - azngunit81

0

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

例如:

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

Views: 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 项目中组织事物。它还具有您想要使用的相同文件夹结构。
祝你好运。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接