2011-06-01 37 views
1

此问题的第一部分看起来很平凡,但重点在于第二部分。解析cakephp中的路径以加载特定模型(是否可以使用.htaccess进行此操作?)

所以,让我们说,我有我的应用程序未来几个环节:

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-开始,在这种情况下,模型车应该使用,如果它以道路/开始,示范道路将在游戏中。

是否可以对routes.php中的一些正则表达式进行处理,或者在两种情况下加载(使用)同一个模型并使用它们来处理它们会更好吗?

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

+0

只是出于好奇,为什么汽车和道路不同的分隔符? – JJJ 2011-06-01 19:27:03

+0

这是从个人请求 – user198003 2011-06-01 19:30:42

+0

我从来没有使用类似的情况下路由,但首先你不使用模型,你正在使用控制器,并调用他们的行动。 控制器中使用模型来获取所需的数据。 – alexdd55 2011-06-01 20:04:37

回答

2

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

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

这条路线说匹配/:carlink任何URL应该被路由到指定的控制器和动作。在最后一部分中,您将澄清什么:carlink可以与正则表达式cars-\w+(“cars-”后跟任何单词)。你也可以将这个值传递给你所谓的动作。

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')); 
相关问题