【问题标题】:Best practice for creating administrator interface in Laravel 4在 Laravel 4 中创建管理员界面的最佳实践
【发布时间】:2014-04-25 14:06:23
【问题描述】:

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

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

【问题讨论】:

标签: php laravel administration


【解决方案1】:

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

使用仓库类(Repository Pattern)解耦依赖,阅读this article

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

还有更多但已经足够开始,在线阅读文章并且必须阅读documentation

【讨论】:

  • 我想像 \Basecontroller 一样,我必须包括所有帮助器,如请求、视图等,无论在控制器方法中需要什么,否则,会引发错误,如请求类未找到某些东西。如何摆脱这个问题?
  • 是的,如果使用了namespace,那么你需要在类的顶部使用` or add use`语句,比如use Request;
  • 我发现另一种最好的方法是将所有控制器保存在 admin 文件夹中并将它们自动加载到 composer.json 中,这样就不需要使用命名空间或手动添加助手。
【解决方案2】:

如果你熟悉作曲家,你可以导入包(又名模块)

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

如果我建议的太复杂,如果需要,您也可以自己制作。

甚至还有一个“laravel-ready”版本的哨兵。

【讨论】:

  • 不幸的是我对作曲家不熟悉,但我想学习/使用它。谢谢
  • 这是你获取 Laravel 的主要方式。查看 Jeffrey Way 出色的 Laravel 部署教程 laracasts.com/lessons/laravel-installation-for-newbs - 它向您展示了作曲家 - 从现在开始,如果您想在更好的编程方面取得进步并且不重新发明轮子,那么您应该开始熟悉它。
【解决方案3】:

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

示例: 控制器:

app/controllers/admin/Admin*Name*Controller.php 应用程序/控制器/站点/*名称*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 项目中组织事物提供一个很好的开端。它还具有您想要使用的相同文件夹结构。

祝你好运。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-13
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多