2017-04-16 9 views
1

"student"라는 접두어를 사용하려고합니다. 그림과 같이 내가 템플릿이나 내가이 오류를 얻고있다 레이아웃 파일에 링크를 만들 때 : routes.php에서 enter image description here정의 된 경로가 없습니다 - Cakephp 3.4에 누락 된 경로

코드는

<?php 
use Cake\Core\Plugin; 
use Cake\Routing\RouteBuilder; 
use Cake\Routing\Router; 
use Cake\Routing\Route\DashedRoute; 

Router::defaultRouteClass(DashedRoute::class); 

Router::scope('/', function (RouteBuilder $routes) { 
    $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']); 
    $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); 
    $routes->fallbacks(DashedRoute::class); 
}); 


Router::prefix('admin', function ($routes) { 
    $routes->connect('/users/', [ 'controller' => 'MyUsers', 'action' => 'index', 'plugin'=>false]); 
    $routes->connect('/login', [ 'controller' => 'MyUsers', 'action' => 'login', 'plugin'=>false, 'prefix'=>'admin']); 
    $routes->connect('/', [ 'controller' => 'MyUsers', 'action' => 'dashboard', 'plugin'=>false]); 
    $routes->fallbacks(DashedRoute::class); 
}); 

Router::prefix('trainer', function ($routes) { 
    $routes->connect('/users/', [ 'controller' => 'MyUsers', 'action' => 'index', 'plugin'=>false]); 
    $routes->connect('/login', [ 'controller' => 'MyUsers', 'action' => 'login', 'plugin'=>false]); 
    $routes->connect('/', [ 'controller' => 'MyUsers', 'action' => 'dashboard', 'plugin'=>false]); 
    $routes->fallbacks(DashedRoute::class); 
}); 


Router::prefix('student', function ($routes) { 
    $routes->connect('/courses/', array ('controller' => 'Courses', 'action' => 'index', 'plugin' => false, 'prefix' => 'student', '_ext' => NULL,)); 
    $routes->connect('/', array ('controller' => 'MyUsers', 'action' => 'dashboard', 'plugin' => false)); 
}); 

/** 
* Load all plugin routes. See the Plugin documentation on 
* how to customize the loading of plugin routes. 
*/ 
Plugin::routes(); 

레이아웃 파일 student.ctp는 단 한 줄의 코드 만 가지고 :

<li><?php echo $this->Html->link('Courses', [ 'controller' => 'Courses', 'action' => 'index', 'plugin' => false, 'prefix' => 'student', '_ext' => NULL, ]);?></li> 

AppController.php :

<?php 

namespace App\Controller; 

use Cake\Controller\Controller; 
use Cake\Event\Event; 
use Cake\Core\Configure; 
use Cake\Network\Exception\NotFoundException; 




class AppController extends Controller 
{ 

    public $helpers = array(
     'CakeDC/Users.AuthLink', 
     'CakeDC/Users.User', 
     ); 


    public function initialize() 
    { 
     parent::initialize(); 

     $this->loadComponent('RequestHandler'); 
     $this->loadComponent('Flash'); 
     $this->loadComponent('CakeDC/Users.UsersAuth'); 
     $this->loadComponent('Utils.GlobalAuth'); 

     $this->Auth->config('loginRedirect', array('controller'=>'Courses', 'action'=>'index', 'plugin'=>FALSE)); 
     $this->Auth->config('logoutRedirect', array('controller'=>'MyUsers', 'action'=>'login', 'plugin'=>FALSE)); 
     $this->Auth->config('unauthorizedRedirect', array('controller'=>'Courses', 'action'=>'index', 'prefix'=>$this->Auth->user('role'))); 
     $this->Auth->config('loginAction', array('controller'=>'MyUsers', 'action'=>'login')); 
     $this->Auth->allow(['login', 'logout']); 



    } 


    public function beforeRender(Event $event) 
    { 
     if (!array_key_exists('_serialize', $this->viewVars) && 
      in_array($this->response->type(), ['application/json', 'application/xml']) 
     ) { 
      $this->set('_serialize', true); 
     } 

     $this->_renderLayout(); 
    } 

    private function _renderLayout() 
    { 
     $prefix = isset($this->request->params['prefix'])?$this->request->params['prefix']:FALSE; 

     if(!$prefix) 
     { 
      return; 
     } 

     $this->viewBuilder()->setLayout($prefix); 



    } 





} 

내가이 솔루션을 확인했다 : CakePHP 3: Missing route error for route that exists

답변

1

당신은 부울로 특수 plugin 키를 먹일 수를, 그 중 하나 null, 또는 플러그인의 이름을 가진 문자열이어야합니다.

또한 경로를 연결할 때 plugin 또는 prefix 키를 정의 할 필요가 없으므로 Router::prefix() 메서드는 접두사 추가를 처리합니다. 유사하게 Router::plugin()은 플러그인 이름을 추가하고, Router::plugin()을 사용하지 않을 경우 plugin 키의 기본값은 null입니다.

과 함께 _ext을 정의하면 확장자가있는 URL을 생성하지 않으려는 경우에만 적합합니다. URL을 생성 할 때 URL을 지정하는 것이 비 null 값으로 정의 된 경우에만 필요하며 이는 plugin 키에도 해당됩니다 (현재 플러그인 컨텍스트에서 벗어날 필요가없는 경우).

$routes->connect('/courses/', [ 
    'controller' => 'Courses', 
    'action' => 'index' 
]); 

그리고 URL 만위한 추가적인 prefix 키가 필요합니다 생성 플러그인 컨텍스트에서 사용하지 않을 경우 plugin는 선택 사항입니다 :

는 는

긴 이야기 짧은 경로를 연결하는 경우에만 controlleraction 키를 필요로

$this->Html->link('Courses', [ 
    'controller' => 'Courses', 
    'action' => 'index', 
    'plugin' => null, 
    'prefix' => 'student' 
]);