如何从cakephp中的url中删除操作名称?

时间:2012-12-28 12:29:54

标签: php .htaccess cakephp url-rewriting

我正在开发cakephp项目。我已经使用.htaccess文件从URL中删除了index.php,现在我想从URL&中删除视图名称。添加其他两个变化的参数。假设我选择country&城市然后这两个参数应该在选择它们时出现在URL中。

我面临的问题是像cakephp一样

www.example.com/Controllername/viewname

但我的要求是这样的

www.example.com/Controllername/param1/param2

如果我通过这种方式,它会将param1视为控制器,将param2视为视图。

最初应该像:

www.example.com/Controllername/

2 个答案:

答案 0 :(得分:2)

APP/routes.php

// www.example/com/Controllername
Router::connect('/Controllername', 
    array('controller'=>'Controllername', 'action'=>'index'));

// www.example.com/Controllername/param1/param2
Router::connect('/Controllername/:param1/:param2',
    array('controller'=>'Controllername', 'action'=>'index'), 
    array('pass' => array('param1', 'param2')));

和您的控制人员:

// set to null/a value to prevent missing parameter errors
public function index($param1=null, $param2=null) {
   //echo $param1 . ' and ' . $param2;
}

生成链接时:

array('controller'=>'Controllername', 'action'=>'index', 'param1'=>'foo', 'param2'=>'bar');

订单很重要。将paramX更改为您想要的任何内容,即countrytown

请注意,这不包括:controllername/param1 - 在此示例中都必须存在。

还有其他方法可以实现这一目标。

答案 1 :(得分:0)

我认为您应首先确保启用 mod-rewrite 模块。如果启用了mod_rewrite,则不应该使用.htaccess从url中删除index.php。检查如何在您的网络服务器手册中启用它,并且cakephp的默认.htaccess应该能够为您处理剩余的路由。

启用重写模块后,您可以修改@Ross在上一个答案中指出的路线 APP / routes.php

// www.example/com/Controllername
Router::connect('/Controllername', 
array('controller'=>'Controllername', 'action'=>'index'));

// www.example.com/Controllername/param1/param2
Router::connect('/Controllername/:param1/:param2',
array('controller'=>'Controllername', 'action'=>'index'), 
array('pass' => array('param1', 'param2')));