CakePHP v3多次无法使用自定义路由类

时间:2018-02-09 00:17:47

标签: php cakephp url-routing cakephp-3.x

我正在尝试使用自定义路由类。一切都很好,而我只使用一条路线,但致命错误 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? 或者我做错了什么?

0 个答案:

没有答案