2

您好,我的代码在 CakePHP 框架中不起作用,并且显示错误消息。

网址:

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,但我需要得到param1param2两者,在index函数中没有创建另一个动作。

请帮助我,谢谢

4

2 回答 2

3

如果您访问http://domainname.com/About/index/param1/param2 ,您的原始代码将起作用

如果您不希望indexurl 中的 ,我假设您不希望,那么您需要定义一个路由。

将此添加到您的路线:

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

自动路由未指定操作但具有参数以执行操作的请求index。您将需要为任何新About操作添加路由,以阻止它们的请求默认进入索引。

于 2013-02-20T10:26:19.120 回答
2

您可能在不指定操作名称(索引)的情况下访问此 URL,如下所示:

/关于/param1/param2

这将不起作用,因为 Cake 期望在控制器名称之后看到动作名称。在这种情况下,param1 被视为操作名称。您可以使用 URL 访问您的操作

/about/index/param1/param2

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

Router::connect(
    '/about/:param1/:param2',
    array('controller' => 'about', 'action' => 'index'),
    array('param1', 'param2')
);
于 2013-02-20T10:32:46.860 回答