cakephp 3.0路由问题

时间:2016-03-30 14:38:59

标签: cakephp routes cakephp-3.0

我在cakephp3面临问题。在routes.php中我使用了

Router::prefix('admin', function ($routes) {
     $routes->connect('/', ['controller' => 'TblUsers', 'action' => 'index']);
});

我已将TblUsers放在Admin文件夹

在app控制器代码中:

$this->loadComponent('Auth', [
    'authenticate' => [
        'Form' => [
            'fields' => [
                'username' => 'username',
                //'password' => 'password'
            ],
            'scope' => ['role' => '1']
        ]
    ],
    'loginAction' => [
        'controller' => 'Users',
        'action' => 'login',
        'admin'=>true,
        'prefix'=>true

    ],
    'redirectUrl' => [
        'controller' => 'TblUsers',
        'action' => 'index',
        'admin'=>true,

    ],
    'loginRedirect' => [
        'controller' => 'TblUsers',
        'action' => 'index',
        'admin'=>true,

    ]
]);

现在,当我访问users / login时,它给出了我的错误:

  

错误:路由匹配“数组('controller'=>'用户','操作'=>'登录','admin'=> true,'前缀'=> true,'插件' => NULL,'_ ext'=> NULL,)“无法找到。

OR

在像cakephp2这样的cakephp3中是否有任何方法可以访问任何控制器内部的函数admin_functionname,并调用admin_functionname.ctp文件并在网址中添加管理员。

由于

2 个答案:

答案 0 :(得分:2)

您需要将前缀更改为实际前缀,而不是true

所以改变这个;

'loginAction' => [
    'controller' => 'Users',
    'action' => 'login',
    'admin'=>true,
    'prefix'=>true

对此;

'loginAction' => [
    'controller' => 'Users',
    'action' => 'login',
    'prefix'=> 'admin'

您需要对loginRedirect和redirectUrl

执行相同的操作

您可以在http://book.cakephp.org/3.0/en/development/routing.html#prefix-routing

找到更多信息

答案 1 :(得分:0)

此示例适用于带管理员面板的简单页面:

结构fodlers和文件:

src
_Controller
 _admin
   __AppController.php
   __UsersController.php
   __OtherAdminController.php
 _AppController.php
 _UsersController.php
 _OtherPublicController.php

_Template
 _admin
  __Users
    _login.ctp
    _add.ctp
    _etc.ctp
  __OtherAdminTemplate
 _Users
 _Pages
 _etc

<强>配置/ routes.php文件

Router::prefix('admin', function (RouteBuilder $routes) {

  $routes->connect('/',['controller' => 'Users', 'action' => 'login']);
  $routes->connect('/:controller',['action' => 'index'],['routeClass' => 'DashedRoute']);
  $routes->connect('/:controller/:action/*',[], ['routeClass' => 'DashedRoute']);

});

<强>控制器/管理/ AppController.php

<?php
namespace App\Controller\Admin; // <---- Name your admin folder

use App\Controller\AppController as Controller;
use Cake\Event\Event;
use Cake\Core\Configure;
/**
 * App Controller
 *
 * @property \App\Model\Table\AppTable $App
 */
class AppController extends Controller
{

    public function initialize()
    {
        parent::initialize();
        $this->loadComponent('Auth', array(
            'authenticate' => array(
                'Form' => array('fields' => array('username' => 'email', 'password' => 'password'))
            ),
            'loginRedirect' => array(
                'controller' => 'Users',
                'action' => 'index'
            ),
            'logoutRedirect' => array(
                'prefix' => false,
                'controller' => 'Pages',
                'action' => 'home',
            ),
        ));

        $this->Auth->deny();

    }

    public function beforeFilter(Event $event)
    {
        // If you want use admin.ctp layout
        if ($this->request->params['prefix'] === 'admin') {
             $this->viewBuilder()->layout('admin');
        }
        //Autorized acctions without registration   
        $this->Auth->allow(['forgotPassword', 'resetPassword']);

    }

}

<强>控制器/管理/ UsersController.php

<?php
namespace App\Controller\Admin; // <---- Name your admin folder

use App\Controller\Admin\AppController;  // <---- Name your admin folder
use Cake\Mailer\Email;
use Cake\Routing\Router;
use Cake\Core\Configure;

/**
 * Users Controller
 *
 * @property \App\Model\Table\UsersTable $Users
 */
class UsersController extends AppController
{
    public function login() 
        {
      //Admin Login function
        }

    //Rest of Users admin functions
}