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

如何在cakephp中从url中删除操作名?,php,.htaccess,cakephp,url-rewriting,Php,.htaccess,Cakephp,Url Rewriting,我正在从事cakephp项目。我已经使用.htaccess文件从URL中删除了index.php,现在我想从URL中删除视图名&添加另外两个不同的参数。假设我选择country&city,那么在选择它们时,这两个参数应该出现在URL中 我面临的问题是cakephp所面临的问题 www.example.com/Controllername/viewname 但我的要求是这样的 www.example.com/Controllername/param1/param2 如果我通过这种方式,它会将p

我正在从事cakephp项目。我已经使用.htaccess文件从URL中删除了index.php,现在我想从URL中删除视图名&添加另外两个不同的参数。假设我选择country&city,那么在选择它们时,这两个参数应该出现在URL中

我面临的问题是cakephp所面临的问题

www.example.com/Controllername/viewname
但我的要求是这样的

www.example.com/Controllername/param1/param2
如果我通过这种方式,它会将param1作为控制器,将param2作为视图

最初应该是这样的:

www.example.com/Controllername/

在您的
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
更改为您想要的任何内容,即
country
town

注意:这不包括:
controllername/param1
-在本例中必须同时存在这两个参数


还有其他方法可以实现这一点

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

启用重写模块后,您可以按照@Ross在youAPP/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')));

谢谢回复,当我尝试这个时,我得到了URL,但我不想在URL中使用viewname