【问题标题】:Laravel user forms and admin forms: how to tackle?Laravel 用户表单和管理员表单:如何解决?
【发布时间】:2014-04-05 15:09:19
【问题描述】:

只是一个询问你们如何在 Laravel 中解决这个问题的问题: 我在UserController.php 中定义了一个用户首选项页面,它在user/preferences.blade.php 创建视图。 管理员当然应该能够编辑用户的首选项,并显示一些需要更改的额外管理字段。此外,我想在一个名为 AdminUserController.php 的单独控制器中收集与用户有关的所有管理功能。

我正在考虑实现此功能的一些可能性:

  • 创建一个额外的视图(例如admin/user/preferences.blade.php)并几乎复制UserController.php 的 GET 和 POST 方法以容纳额外的字段。然而,这在我看来像是很多冗余代码......

  • UserController.php 的 GET 和 POST 方法转换为如下形式:

    public function postPreferences($user = NULL, $admin = FALSE) {
      if (!isset($user)) $user = Auth::user();
        // Process regular fields.
      if ($admin) {
        // Process admin fields.
      }
    }
    

    将管理字段添加到user/preference.blade.php 并在$admin 为TRUE 时有条件地显示它们,然后从AdminUserController 中调用UserController 的方法,例如:

    public function postPreferences($user) {
      return (new UserController)->postPreferences($user, TRUE);
    }
    

    但是,也有一些缺点。第一:控制器不应该互相调用......第二:这仅适用于 POST 方法。从 UserController 请求 GET 方法后,将引发异常...

我很好奇你会如何解决这个问题! 谢谢。

【问题讨论】:

    标签: forms laravel controller laravel-4


    【解决方案1】:

    这主要是一个偏好问题,但我真的建议您完全在这里将所有可能的东西分开。管理是一个非常敏感的过程,如果可能的话,普通用户在任何情况下都无法看到它。

    我相信我们都是人类,我们或多或少都会犯错误,这就是为什么我们需要确保我们的错误是没有为正确的变量分配正确的值或使用=而不是@987654322 @不要破坏业务逻辑。

    我认为您应该为用户自我管理和管理创建一个单独的视图和一个单独的控制器,并且永远不要将它们捆绑在一起。如果您想尽可能地保持代码 DRY,您可以从您的管理控制器和模型扩展您的用户控制器和模型,但不能反过来。这只是我的 2 美分,这完全取决于您正在开发的应用程序类型以及赌注。

    <?php
    class AdminController extends UserController
    {
        public function __construct(AdminModel $model)
        {
            // Use dependency injection
            $this->model = $model;
        }
    
        // In the original UserController class:
        public function postPreferences($user) {
            $this->model->edit($user, Input::all());
            // you may do it this way so your user only saves user data and
            // you admin model saves all the data including administrative
        }
    
        // ...
    }
    

    【讨论】:

    • 我没想过扩展其中一个控制器,但正如您的示例所暗示的那样:在 DRY 编码中,在我看来,它似乎还有很长的路要走。谢谢,非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2017-06-28
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-16
    • 2018-03-18
    相关资源
    最近更新 更多