在cakephp中解析路由以加载特定模型(是否可以使用.htaccess?)

时间:2011-06-01 19:19:11

标签: cakephp model routes cakephp-1.3

这个问题的第一部分看起来微不足道,但重点在于第二部分。

所以,假设我的应用程序上有以下几个链接:

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

在这些情况下,使用模型车。所以,在这种情况下,我想在URL中使用斜杠来逃避。

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

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

所以,如果它以汽车 - 开头,那么应该使用模型车,如果它以 roads / 开头,模型道路将在游戏中

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

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

1 个答案:

答案 0 :(得分:2)

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

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

此路线显示任何匹配/:carlink的网址都应路由到指定的控制器和操作。在最后一部分中,您将使用正则表达式:carlink(“cars-”后跟任何单词)澄清cars-\w+的含义。您还将该值传递给被调用的操作。

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
        …
    }
}

您的道路网址将像往常一样路由到RoadsController:

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