我正在学习CakePHP,我正在构建一个CMS,但我似乎无法正确使用路由器。
每个网址都应该使用网站控制器的索引操作,除了"admin"
/admin 工作,但是当我去/foobar 时,它要求 FoobarController
Router::connect("/admin/:controller/:action",
array("controller" => "admin")
);
Router::connect("/",
array("controller" => "website", "action" => "index")
);
Router::connect("/:slug/*",
array("controller" => "website", "action" => "index"),
array("pass" => array("slug"), "slug" => '(?!admin)')
);
我认为问题是"slug" => '(?!admin)'
.无论如何,您都不需要它,因为以/admin 开头的 url 已经被您的第一个路由捕获。
其他问题,以下路线没有意义:
Router::connect("/admin/:controller/:action",
array("controller" => "admin")
);`
它基本上告诉管理员控制器和foobar控制器处理/admin/foobar网址。
试试这个:
Router::connect("/admin",
array("controller" => "admin", "action" => "index")
);
Router::connect("/admin/:action",
array("controller" => "admin")
);
Router::connect("/",
array("controller" => "website", "action" => "index")
);
Router::connect("/:slug/*",
array("controller" => "website", "action" => "index"),
array("pass" => array("slug"))
);
所以,我想通了。
通过删除:
Router::connect("/admin/:action",
array("controller" => "admin")
);
Router::connect("/",
array("controller" => "website", "action" => "index")
);
并添加:
Router::connect("/admin",
array("controller" => "admin", "action" => "index")
);
Router::connect("/:slug",
array("controller" => "website", "action" => "index"),
array("pass" => array("slug"))
);
特别感谢PGBI