CakePHP 3:管理员插件和路由

Sal*_*nes 0 cakephp cakephp-3.0

为了迁移到cakephp 3并掌握在这个版本的框架上创建应用程序的技能,我刚刚编写了应用程序和插件.

我想在插件,管理员,客户等中分离Web应用程序.

我可以访问插件中的位置,例如myapp/admin/users,myapp/admin /,但是如果我尝试访问url myapp/admin(最后没有斜线)我必须重定向myapp的位置/ Webroot公司/管理/.

在myapp/webroot /我有一个名为admin的主题文件夹,我试图在admintheme中更改名称,但仍然有重定向.

怎么解决这个?

谢谢.

Kim*_*cks 7

这适用于cakephp 3.1.2

步骤1:将admin前缀路由设置为高于正常值/

// code ... 

// for prefix admin
Router::prefix('admin', function ($routes) {
    // All routes here will be prefixed with `/admin`
    // And have the prefix => admin route element added.
    $routes->fallbacks('InflectedRoute');
});

// for the non-prefix routes
Router::scope('/', function ($routes) {
// more code ...
Run Code Online (Sandbox Code Playgroud)

第2步:在Controllers文件夹中创建一个名为Admin的文件夹

转储相应的控制器.

 Controller
    |
    |------Admin
    |        |
    |        |----- AppController.php
    |        |---- ProductsController.php // this handles all the admin actions  
    |        
    |----- ProductsController.php // this handles the  non-prefix actions        
Run Code Online (Sandbox Code Playgroud)

步骤3:确保Admin文件夹中的所有控制器都使用命名空间 namespace App\Controller\Admin;

步骤4:使Admin文件夹中的所有控制器扩展Admin文件夹的AppController

第5步:在您的beforeFilter for App/Controller/Admin/AppController中添加它

public function beforeFilter(Event $event) 
    {
        $this->viewBuilder()->theme('AppUI'); // AppUI is my plugin name
        $this->viewBuilder()->layout('AppUI.backend'); 
    }
Run Code Online (Sandbox Code Playgroud)

为什么会这样?

因为主题现在应该是一个插件.请参阅http://book.cakephp.org/3.0/en/views/themes.html#themes

我引用了

CakePHP中的主题只是专注于提供模板文件的插件.

像这样:

 plugins
    |
    |------AppUI
    |        |
    |        |----- src
             |        |
             |        |---- Template
                      |        |---- Layout
                               |        |---- backend.ctp
Run Code Online (Sandbox Code Playgroud)