【问题标题】:Parse routes in cakephp to load specific model (is it possible to use .htaccess for this?)在 cakephp 中解析路由以加载特定模型(是否可以为此使用 .htaccess?)
【发布时间】:2011-09-06 13:58:52
【问题描述】:

这个问题的第一部分看起来很简单,但重点在第二部分。

所以,假设我的应用中有接下来的几个链接:

http://myapp.com/cars-audi
http://myapp.com/cars-opel
http://myapp.com/cars-fiat
http://myapp.com/cars-vw

在这些情况下,使用模型车。所以,在这种情况下,我想在 URL 中使用斜杠进行转义。

然后我会有更多的页面和 URL,其中涉及道路,例如:

http://myapp.com/roads/germany
http://myapp.com/roads/austria
http://myapp.com/roads/hungary
http://myapp.com/roads/poland

所以,如果以cars-开头,则应使用模型汽车,如果以roads/开头,则模型道路将在游戏中.

是否可以在 routes.php 中使用一些正则表达式,或者在两种情况下加载(使用)一个相同的模型并像这样使用它们更好?

另外,是否可以使用 .htaccess 文件帮助解析 URL?

【问题讨论】:

  • 只是出于好奇,为什么汽车和道路的分隔符不同?
  • seo 个人要求的
  • 我从来没有在这样的情况下使用路由,但首先你没有使用模型,你使用的是控制器并调用它们的动作。在控制器中使用模型来获取您需要的数据。

标签: cakephp model routes cakephp-1.3


【解决方案1】:

这是一个将 URL 路由到控制器操作的简单案例,它根本不涉及模型。

Router::connect('/:carlink',
                array('controller' => 'cars', 'action' => 'view'),
                array('carlink' => 'cars-\w+', 'pass' => array('carlink')));

这条路由表示任何匹配/:carlink 的URL 都应该被路由到给定的控制器和动作。在最后一部分中,您将使用正则表达式 cars-\w+(“cars-”后跟任何单词)阐明 :carlink 可以是什么。您还将该值传递给您调用的操作。

class CarsController extends AppController {
    public function view($car) {
        if (!preg_match('/cars-(\w+)/', $car, $matches)) {
            // action was accessed with invalid URL, bail out
            $this->cakeError('error404');
        }

        // use $matches[1], which will be 'audi', for example
        …
    }
}

您的道路 URL 将像往常一样被路由到 RoadsController,如下所示:

Router::connect('/roads/*', array('controller' => 'roads', 'action' => 'view'));

【讨论】:

    猜你喜欢
    • 2023-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-25
    • 2014-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多