使用Cake 3管理 - 前缀

时间:2015-02-27 19:53:58

标签: cakephp-3.0

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

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

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

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

但没有成功!

4 个答案:

答案 0 :(得分:12)

三个步骤:

  • 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部分。如果您想要不同的前缀,请替换Admin

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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分: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 /模板/管理员/用户/ login.ctp

答案 3 :(得分:1)

嘿,不确定是否有人能得到你需要的答案。我也遇到了使前缀路由工作的问题。我发现所有这些解决方案,甚至是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');
});

这来自in the template。我改变的只是将控制器从“Pages”更改为“Index”。

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

我的控制器的内容原本是这样的(注意这部分不正确,我之后再纠正)

<?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


}