2016-03-30 7 views
1

Я столкнулся с проблемой в cakephp3. В routes.php я использовалcakephp 3.0 routing issue

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

Я поместил TblUsers внутри Admin папку

В коде контроллера приложения:

$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, 

    ] 
]); 

Теперь, когда я доступ пользователей/войти в свою давая мне ошибку:

Error: A route matching "array ('controller' => 'Users', 'action' => 'login', 'admin' => true, 'prefix' => true, 'plugin' => NULL, '_ext' => NULL,)" could not be found.

OR

Есть ли способ в cakephp3 как cakephp2 для доступа к функциям внутри любого контроллера, начиная с admin_functionname и вызывать файл admin_functionname.ctp, а также добавлять администратора внутри URL-адреса.

Благодаря

ответ

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

0

Этот пример для простой страницы с панели администратора:

Футеровка с подставкой в ​​строении:

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']); 

}); 

Controller/Admin/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']); 

    } 

} 

Controller/Admin/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 
}