Что вы пытаетесь сделать именно?(А что с $ slug?)
Звучит так, будто вы хотите удалить действие (или, по крайней мере, действие view ()?) Из отображения в URL, амирит?Вроде как по умолчанию метод display_controller display () - действие catch-all для статических страниц?
Как это исправить?
Хорошо, я бы предложил начатьс разрывом этого маршрута, потому что в противном случае он делает именно то, что вы сказали:
Router::connect('/portfolio/*',
// * is a wildcard matching anything & everything after /portfolio/
array('controller' => 'portfolio',
// and routing to portfolio's view() action, with or w/o required $args to pass
'action' => 'view'));
, поэтому то, что вы видите при вызове index (), не является пустым представлением, это подавленная фатальная ошибка, котораяэто то, что происходит, когда index () перенаправляется на view () и не имеет $ id для передачи в первый аргумент.
Обратите внимание на окончание DS. Порядок маршрута имеет значение;Первое правило, которое ловит, побеждает.Следующие маршруты все будут отображаться в индекс по умолчанию, если действие URL было опущено, но они не совпадают.
// Targets inside the controller (its methods)
Router::connect('/portfolio/',
array('controller' => 'portfolio', 'action' => 'index'));
не совпадает с
// Targets the controller
Router::connect('/portfolio',
// Specifies the default controller action, can be whatever
array('controller' => 'portfolio', 'action' => 'index'));
Для того, что вы пытаетесь сделать, должно быть
// Targets the controller
Router::connect('/portfolio',
// Routes to 'controller default method' which is index() by Cake default
array('controller' => 'portfolio');
Это позволяет Cake принудительно устанавливать автоматическое сопоставление по умолчанию для индекса контроллера () всякий раз, когда действие отсутствует в URL.
Это все равно сработало бы, если бы не конечный DS и конечная звездочка.То же правило, которое должно поймать index (), вместо этого перенаправляется в view () благодаря конечной звездочке, нацеленной на все действия в портфеле.
Следовательно, предложение Foo не работает -> конечный символ DS +:
Router::connect('/portfolio/',
// the trailing DS changes it to target 'inside portfolio' instead of 'portfolio'
array('controller'=>'portfolio', 'action'=>'index'));
// trailing arbitrary wildcard maps any / all actions directly to view() method
Router::connect('/portfolio/*',
array('controller' => 'portfolio', 'action' => 'view'));
, который просто обеспечивает ВСЕ действия в портфеле непосредственно в методе просмотра портфолио () (включая / portfolio / index)действие).Не пропустите go и т. Д. Любое действие портфолио разрешается с подстановочными знаками, несмотря на то, что псевдоним всего контроллера соответствует этому методу.Таким образом, вы можете отключить DS с первого маршрута, но любой URL, начинающийся с / portfolio, который не является / portfolio, все равно будет перенаправлен на просмотр ().Включая URL /portfolio/index.
Попробуйте:
// catches portfolio/index() without index in the url
Router::connect('/portfolio',
array('controller' => 'portfolio'));
// maps to portfolio/view() without view in url, just /portfolio/integer id
Router::connect('/portfolio/:id',
array('action'=>'view', array('id' => '[0-9]+'));
// routes everything else in portfolio as usual
Router::connect('/portfolio/:action/*',
array('controller'=>'portfolio'));
Маршруты могут быть сложными.Вот несколько ссылок;НТН.:)
http://bakery.cakephp.org/articles/Frank/2009/11/02/cakephp-s-routing-explained
http://book.cakephp.org/view/46/Routes-Configuration