我是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。
我强烈建议您阅读并遵循博客教程来掌握这些概念。