0

我是 cakephp 框架的新手。我不能调用控制器的功能。控制器-

class PagesController extends AppController {
    public $name = 'Pages';
    public $uses = array();

    public function display() {
        $path = func_get_args();

        $count = count($path);
        if (!$count) {
            $this->redirect('/');
        }
        $page = $subpage = $title_for_layout = null;

        if (!empty($path[0])) {
            $page = $path[0];
        }
        if (!empty($path[1])) {
            $subpage = $path[1];
        }
        if (!empty($path[$count - 1])) {
            $title_for_layout = Inflector::humanize($path[$count - 1]);
        }
        $this->set(compact('page', 'subpage', 'title_for_layout'));
        $this->render(implode('/', $path));
    }

    public function register() {
        $this->set('fdf', 'chandan');
        $this->render('home1');
    }
}

但我正在调用 display()。但我没有调用 register()。我的 routes.php 文件就像-

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));

请帮我。如何从 cakephp 的视图中调用控制器函数。以及必须为此做哪些设置?

4

1 回答 1

1

我要说几点,路由文件用于定义自定义 slugs/url,看看你的第一个路由定义:

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

这就是说“www.mysite.com/”应该链接到控制器页面,操作显示并将第一个参数作为主页传递。

这可以通过简单地执行“www.mysite.com/pages/display/home”来访问- 但使用“/”作为路线更整洁。一般规则是“www.mysite.com/controller/action/param1/param2/etc..”

因此,按照这个逻辑,您将访问您的新操作方法,如下所示: “www.mysite.com/pages/register”

话虽这么说...当使用 MVC 时,您应该真正遵循规定的约定,如果您要创建一个注册方法,您应该将它真正包含在处理用户帐户的控制器中,即“UsersController”-“www.mysite .com/users/register"

此外,除非您必须在特殊条件下渲染单独的视图,否则您实际上不需要使用 $this->render()。

总而言之,包含相关控制器中的所有操作(即 www.mysite.com/users/login 和 www.mysite.com/users/register),切勿直接指定 $this->render 除非您确实需要渲染其他内容比默认值(/users/register.ctp 将是 www.mysite.com/users/register 的默认值),并且路由用于创建更整洁或自定义的 url。

我强烈建议您阅读并遵循博客教程来掌握这些概念。

于 2013-05-15T19:20:53.657 回答