如何使用默认函数调用cakephp框架中的控制器函数


how to call function of controller in cakephp framework with default function?

我是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中从视图调用控制器函数。需要做什么设置呢?

我想说明几点,路由文件是用来定义自定义的slugs/url的,看一下你的第一个路由定义:

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

这是说"www.mysite.com/"应该链接到控制器页面,动作显示并传递第一个参数作为home。

可以通过"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。

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