【发布时间】:2019-02-21 10:27:05
【问题描述】:
这个问题涉及 CakePHP 3.7.3 中的路由 (config/routes.php)
我有一个使用 3 个控制器的应用程序。其中两个位于“Admin”命名空间中:
Controller/Admin/ArticlesController.phpController/Admin/UsersController.phpController/ArticlesController.php
我正在努力实现以下目标:
-
创建一个服务于
Admin/UsersController::login()的“快捷方式”网址https://example.com/admin- 即https://example.com/admin/users/login -
在我的网站前端显示页面的函数是
ArticlesController::view()。如果我有一个 URL slug “foo”,我的页面会提供来自 URLhttps://example.com/articles/view/foo的内容。不过我只想https://example.com/foo。
在我的config/routes.php 中,我已经配置了管理员路由:
Router::scope('/', function (RouteBuilder $routes) {
Router::prefix('admin', function ($routes) {
// All routes here will be prefixed with `/admin`
// And have the prefix => admin route element added.
$routes->fallbacks(DashedRoute::class);
});
$routes->fallbacks(DashedRoute::class);
});
这行得通 - 我可以在 https://example.com/admin/users/login 登录。
为了解决(1)我尝试添加以下内容:
Router::connect('/admin', ['controller' => 'Users', 'action' => 'login']);
// The line above is immediately outside the existing code shown previously:
Router::scope('/' ...
但这给了我一个错误:
错误:找不到 AdminController。
错误:在文件中创建下面的类 AdminController:
src/Controller/AdminController.php
它被要求使用的控制器是Users,所以我不明白为什么它要求AdminController?
为了解决(2)我尝试:
$routes->connect('/*', ['controller' => 'Articles', 'action' => 'view]);
但是,当尝试访问 https://example.com/foo 时,会出现以下错误:
错误:找不到 FooController。
显然这不是我想要做的 - 我希望它使用我在数组中指定的 Articles 控制器和 view 操作。
在我的两个管理控制器(Controller/Admin/ArticlesController.php 和 Controller/Admin/UsersController.php)中,我声明:
namespace App\Controller\Admin;
在类名之外,例如class ArticlesController extends AppController
对于非管理员ArticlesController (Controller/ArticlesController.php) 我已经声明:
namespace App\Controller;
后跟类名class ArticlesController extends AppController
这似乎过于复杂。有人可以帮忙吗?
【问题讨论】:
标签: php cakephp routing cakephp-3.x