我正在尝试使用自定义路由类。一切都很好,而我只使用一条路线,但致命错误 otherwice
Cannot redeclare class Cake\Routing\Route\EventRoute in src/Routing/Route/EventRoute.php on line 24
在我的 routes.php
中Router::scope('/', function ($routes) {
$routes->setRouteClass('EventRoute');
$routes->connect('/:event', ['controller' => 'Events', 'action' => 'view']);
$routes->connect('/:event/:action/*', ['controller' => 'Events']);
$routes->connect('/:event/:number-:name', ['controller' => 'Users', 'action' => 'view'], ['number' => '\d+', 'pass' => ['number', 'name']]);
$routes->setRouteClass('InflectedRoute');
$routes->connect('/login', ['controller' => 'Members', 'action' => 'login']);
}
通过这种方式,我希望通过它的slug将数据库中的所有事件都设置为短URL并将slug转换为param,如
http://example.com/first_event -> Events.view ['event' => 'first_event']
http://example.com/coolest_event/edit -> Events.edit
http://example.com/past_event/12-someuser -> Users.view
如果没有找到这样的事件,则保持默认的Cake控制器/动作路由。
档案 EventRoute.php
<?php
namespace Cake\Routing\Route;
use Cake\ORM\TableRegistry;
class EventRoute extends Route
{
public function parse($url, $method = '')
{
$params = parent::parse($url, $method);
if (!$params) {
return false;
}
if (!empty($params['event'])) {
$events = TableRegistry::get('Events')->findBySlug($params['event'])->first();
if (empty($events)) return false;
}
return $params;
}
}
如果我只使用一个(上面三个路线中的任何一个),系统按预期工作但我不能同时使用这三个路线。
似乎CakePHP试图包含我的 EventRoute.php 而不是include_once? 或者我做错了什么?