【问题标题】:Administration with Cake 3 - Prefix使用 Cake 3 管理 - 前缀
【发布时间】:2015-02-27 19:53:58
【问题描述】:

我实际上正在测试CakePHP3,我不知道如何管理,使用Cake 2,我们可以在Core 中编写

Configure::write('Routing.prefixes', array('admin'));

但是对于 CakePHP3,我们没有 Core,而且在文档中我找不到这段代码!我试试路由

Router::prefix('admin', function ($routes) { 
  //My route   
  $routes->fallbacks('InflectedRoute');
});

但没有成功!

【问题讨论】:

标签: cakephp-3.0


【解决方案1】:

三个步骤:

  • config/routes.php:在文件末尾添加以下内容:

    Router::prefix('Admin', function ($routes) {
        $routes->fallbacks('InflectedRoute');
    });
    
  • 创建src/Controller/Admin 并将您的UsersController.php 文件(否则您将在上层Controller 中创建)移入其中。在<?php 开始标记之后添加以下行

    namespace App\Controller\Admin;
    
  • 创建视图。 创建一个Template/Users/Admin 文件夹并将所有add.ctp、edit.ctp、view.ctp 文件转储到其中。

Admin 前缀将用于指代管理部分。如果您想要不同的前缀,请替换 Admin

我刚刚发现这是目前最好的方法。如果有人有更好的方法,请分享。

【讨论】:

    【解决方案2】:

    我找到了管理员前缀的解决方案。请看下面的代码:

    app/config/routes.php

    Router::prefix('admin', function($routes) {
    $routes->connect('/', ['controller'=>'Users','action'=>'login']);
    $routes->fallbacks('InflectedRoute');
    });
    

    在 Controller 中创建 Admin 文件夹 src: src/Controller/Admin/UsersController.php

    在UsersController.php中添加这行代码

    namespace App\Controller\Wcbadmin;
    

    现在制作视图文件: src/Template/Admin/Users/login.ctp

    【讨论】:

      【解决方案3】:

      在 cakephp 3.x 中改变路由概念, Configure::write('Routing.prefixes', array('admin')); 如果你想使用它, 请在您的控制器文件夹中创建一个管理文件夹,并在此文件夹中写入同名控制器名称。 如果你想 admin_index() 像 2.x 一样使用函数,那么你只需要在管理文件夹控制器中编写 index() 函数。

      注意一件事,在您的router.php 中添加此代码

      Router::prefix('admin', function ($routes) { 
        //My route   
        $routes->fallbacks('InflectedRoute');
      }); 
      

      【讨论】:

      • 你能用例子解释一下吗,这是一个很好的例子。但我无法实现它。
      【解决方案4】:

      嘿,不确定是否有人为您提供了所需的答案。我也遇到了前缀路由工作的问题。我发现所有这些解决方案,甚至 CakePHP 3.X 食谱都遗漏了一些细节。下面正是我所做的。我使用的是 3.1.3 版本。

      在我添加的 routes.php 文件中

      Router::prefix('admin', function ($routes) {
           // All routes here will be prefixed with `/admin`
           // And have the prefix => admin route element added.
           $routes->connect('/', ['controller' => 'Index', 'action' => 'index']);    
           $routes->fallbacks('DashedRoute');
      });
      

      这是来自cookbook on prefix routing。我所做的只是将控制器从“Pages”更改为“Index”。

      然后我创建了一个位于 src/Controller/Admin/IndexController.php

      的控制器

      我的controller的内容原来是这样的(注意这部分有误,我后来更正了)

      <?php
      
      namespace App\Controller; // INCORRECT NAMESPACE
      
      // INCORRECTLY MISSING use Cake\Controller\AppController
      use Cake\Network\Exception\NotFoundException;
      use Cake\View\Exception\MissingTemplateException;
      use Cake\Event\Event;
      
      class IndexController extends AppController{
      
          public function index(){
              $this->set('title_for_layout', 'Admin Dashboard');
          } // END INDEX ACTION
      
      
      }
      

      在收到“找不到类 IndexController”的错误消息后,我不得不将文件更改为以下内容。我通过阅读整个错误消息发现了这一点。这是我在食谱或您收到的任何答案中都没有看到的信息。

      <?php
      
      namespace App\Controller\Admin; // THIS IS THE CORRECT NAME SPACE
      
      use App\Controller\AppController; // HAVE TO USE App\Controller\AppController
      use Cake\Network\Exception\NotFoundException;
      use Cake\View\Exception\MissingTemplateException;
      use Cake\Event\Event;
      
      class IndexController extends AppController{
      
          public function index(){
              $this->set('title_for_layout', 'Admin Dashboard');
          } // END INDEX ACTION
      
      
      }
      

      【讨论】:

      • 谢谢!这条评论使我免于为每个前缀制作单独的应用控制器!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-03
      • 2011-06-02
      • 1970-01-01
      • 2012-09-16
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      相关资源
      最近更新 更多