【问题标题】:cakephp 3.0 same controller name for admin and userscakephp 3.0 管理员和用户的控制器名称相同
【发布时间】:2015-05-29 18:49:32
【问题描述】:

我正在使用 cakephp 3.0 并想在用户控制器中编写一些管理操作和一些用户操作。管理员操作应该可以从管理员路由访问,用户操作应该可以在没有管理员路由的情况下访问

我知道在 cakephp 3.0 for admin 中,用户控制器应该在

src/Controller/Admin/UsersController.php

对于普通用户,用户控制器应该在

src/Controller/UsersController.php

现在的困惑是, 将相同的控制器名称放在 2 个不同的目录中是否正确,还是我遗漏了什么?

提前致谢。

【问题讨论】:

    标签: cakephp-3.0


    【解决方案1】:

    您可以通过在 routes.php 文件中定义路由来将它们保存在同一个 UsersController 中,如下所示:

    // Connect routes for admin prefix.
    Router::connect(
        'admin/users',
        ['plugin' => false, 'controller' => 'Users', 'action' => 'adminIndex']
    );
    Router::connect(
        'admin/users/:action/*',
        ['plugin' => false, 'controller' => 'Users']
    );
    

    如果您在上面的代码中注意到,我已经为管理员索引操作指定了 adminIndex 操作。通过这样做,您可以创建一组不同的操作和视图,以使其更易于管理,同时将它们保留在一个位置。

    但是,对于较大的应用程序,最好将管理区域与前端区域分开。毕竟这是你的选择。

    【讨论】:

      【解决方案2】:

      由于您的访问点不同,例如 /src/Controller/Admin/ControllerName 和 /src/Controller/ControllerName 您可以同时使用 ControllerName 和 ActionName 保持相同。

      假设您想在管理和公共部分创建一个 UsersController。您还想在控制器中创建一个 actionName。就像:

      //Name it in Admin Directory  /src/Controller/Admin/UsersController.php
      public function index()
      {
          $this->layout = 'admin_default';
          $this->set('users', $this->paginate($this->Users));
          $this->set('_serialize', ['users']);
      }
      
      //Name it in Public Directory  /src/Controller/UsersController.php
      public function index()
      {
          $this->set('users', $this->paginate($this->Users));
          $this->set('_serialize', ['users']);
      }
      

      希望能让你明白。

      【讨论】:

      • 如果对你有帮助,请让这个答案是正确的。谢谢
      • 感谢您的回答。在 2 个不同的路径中使用相同的控制器名称是个好主意吗?
      • 如果你为管理员前缀烘焙,它使控制器对我们来说和公共一样,它也让我们记住相同的名字,但如果需要你可以随意改变它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-22
      • 1970-01-01
      • 2017-03-08
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多