Cakephp传递了参数

时间:2013-02-20 10:18:40

标签: php cakephp routing url-routing

您好,我的代码在CakePHP框架中无效,并且显示错误消息。

URL:

http://domainname.com/About/param1/param2

代码:

class AboutController extends AppController {

    public $name = 'About';
    public $helpers = array('Html');

    public function index($arg1, $arg2)
    {
        print_r($this->request->params['pass']);
        $this->set('title_for_layout','Sarasavi Bookshop - About Sarasavi Bookshop');
        $this->set('nameforfiles','about');
    }
}

错误讯息:

Missing Method in AboutController    
Error: The action param1 is not defined in controller AboutController
Error: Create AboutController::param1() in file: app\Controller\AboutController.php.

<?php
class AboutController extends AppController {


    public function param1() {

    }

}

Notice: If you want to customize this error message, create app\View\Errors\missing_action.ctp

创建函数param1后,我可以获得param2,但我需要在param1函数中同时获得param2index而不创建其他操作

请帮帮我, 感谢

2 个答案:

答案 0 :(得分:3)

如果您转到http://domainname.com/About/index/param1/param2

,原始代码就会有效

如果您不想在网址中使用index,我认为您没有,那么您需要定义路线。

将此添加到您的路线:

Router::connect(
    '/About/*',
    array('controller' => 'About', 'action' => 'index')
);

自动路由未指定操作但有params的请求转到index操作。您需要为任何新的About操作添加路由,以阻止它们默认转到索引的请求。

答案 1 :(得分:2)

您可能无需指定操作名称(索引)即可访问此URL:

/about/param1/param2

这不会起作用,因为Cake希望在控制器名称后面看到动作名称。在这种情况下,param1被视为操作名称。 您可以使用网址

访问您的操作

/about/index/param1/param2

要克服这种情况,请为您的路由器制定新规则:

Router::connect(
    '/about/:param1/:param2',
    array('controller' => 'about', 'action' => 'index'),
    array('param1', 'param2')
);