只是一个问题来调查你们如何在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方法时,抛出异常......
我很好奇你将如何解决这个问题! 感谢。
答案 0 :(得分:1)
这主要是一个偏好问题,但我建议你完全将所有可能的内容分开。管理是一个非常敏感的过程,并且在任何可能的情况下都不会,普通用户将能够在任何情况下看到它。
我相信我们都是人类,我们或多或少会犯错误,这就是为什么我们需要确保我们的错误在于没有为正确的变量分配正确的值或者使用=
而不是==
不要破坏业务逻辑。
我认为您应该为用户自我管理和管理创建一个单独的视图和一个单独的控制器,而不是将它们捆绑在一起。如果您想尽可能地保持代码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
}
// ...
}