2017-04-16 17 views
1

接頭辞 "student"を使用しようとしています。私は、テンプレートやレイアウトファイルにリンクを作成すると、画像のように、私はこのエラーを取得しています:routes.phpの定義されたルートがありません - Cakephp 3.4のルートがありません

enter image description here

コード

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



    } 





} 

私はこのソリューションをチェックして:あなたはブール値との特別なpluginキーを供給することはできませんCakePHP 3: Missing route error for route that exists

答えて

1

、それはどちらかnull、またはプラグインの名前の文字列でなければなりません。

また、ルートを接続するときにpluginまたはprefixのキーを定義する必要はありません。Router::prefix()メソッドで接頭辞を追加します。同様にRouter::plugin()はプラグイン名を追加し、Router::plugin()を使用しない場合は、pluginキーのデフォルト値はnullです。

さらに、_extnullと定義すると、拡張子を含むURLを生成しないようにすることができます。 URLを生成するときにURLを指定する必要があるのは、nullという値ではなく、pluginのキーにも当てはまります(現在のプラグインのコンテキストから脱出する必要がない限り)。

:唯一のadditonal prefixキー、プラグインのコンテキストで使用されていない場合 pluginはオプションですが必要な

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

そして、URLを生成する:

かいつまんで、ルートを接続するだけcontrolleractionキーが必要です

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

関連する問題