0

我一直在尝试使用带有 Cake 的路由器获得漂亮的 url。

www.mysite.com/category/slug

www.mysite.com/slug

www.mysite.com/category/

我认为没有公式可以准确地得到我想要的,所以我想明确匹配每个 url。我希望我的路由表看起来像这样

  id | url | controller | action | param 

所以当有人去 www.mysite.com/mysubcategory/my-title-of-page

我希望它与 url 列交叉引用“mysubcategory/my-title-of-page”并继续。做这个的最好方式是什么?

我的猜测是将所有流量引导到路由控制器

Router::connect('/*', array('controller' => 'Routes', 'action' => 'redirs'));

但是当它重定向时,我希望它在浏览器中显示漂亮的 url,我不希望它显示articles/view/12

谢谢你

4

1 回答 1

1

您可以使用从数据库中检索到的信息动态创建路由,也可以使用查找表的自定义路由类。如果您只有几条路线,那么您可能想要使用前者。

在您routes.php只需阅读表格并连接路线时,它应该就这么简单。这是一个非常基本的示例:

use Cake\ORM\TableRegistry;

$Routes = TableRegistry::get('Routes');
$routes = $Routes->find();

foreach ($routes as $route) {
    Router::connect(
        $route->url,
        [
            'controller' => $route->controller,
            'action' => $route->action
        ],
        [
            'pass' => [$route->param]
        ]
    );
}

对于动态的东西,请检查例如Mapping slugs from database in routing

于 2015-11-08T18:11:58.023 回答