我的CakePHP应用程序中有一个Element,它有一些字段和一个按钮。我希望将此元素放在我的所有页面中,当用户单击该按钮时,它将转到相同的控制器和操作。元素中的表单适用于根页面,但是当我在另一个页面上并单击按钮时,该函数永远不会被命中,地址栏只会附加控制器/函数。
元素:
<form id="login-user" action="Login/doSomething" method="post">
<input id="edit-submit-button" class="form-submit" type="submit" value="Log in" name="op"> </input>
</form>
我的控制器是:
class LoginController extends Controller{
public $helpers=array('Js'=>array('Jquery'), 'Session');
public function index() {
$this->autoRender = false;
}
function doSomething(){
$this->redirect("/");
}
}
我在Pages.ctp文件和View中有这个元素。当我单击Pages.ctp文件中的按钮时,该页面将被重定向到localhost / myApp / Login / doSomething并且该函数被命中。但是如果元素在视图中(localhost / myApp / somePage / view)并且用户单击表单按钮,则页面将仅重新加载并将“Login / doSomething”附加到地址的末尾但从未命中该函数。
任何人都知道如何解决这个问题?
答案 0 :(得分:2)
1)您应该尝试使用FormHelper而不是手动编写
2)你至少应该使用CakePHP Helper或其他东西构建URL
3)您的链接是相对的 - 在它之前添加/
它可能会有效 - 如果它仍然没有,那么您的链接就是错误的。
示例:强>
<?php
echo $this->Form->create('User', array(
'url' => array(
'controller'=>'users',
'action'=>'login'
),
'id' => 'login-user'
));
//...
答案 1 :(得分:1)
您需要更改操作以包含Controller + Action
示例:
<form id="login-user" action="Login/doSomething" method="post">
如果Login是您的控制器,则应该是:
<form id="login-user" action="/Login/doSomething" method="post">
但是如果你的MVC如下;用户应该是你的控制器,登录应该是你的方法,如果你使用CakePHP最好遵循约定并使用它提供的HTML Helper,你上面的代码:
<form id="login-user" action="Login/doSomething" method="post">
<input id="edit-submit-button" class="form-submit" type="submit" value="Log in" name="op"> </input>
</form>
应该是:
<?php
echo $this->Form->create('User', array('id'=>'login-user', 'url'=>'/user/login'));
echo $this->Form->submit('Log In', array('class'=>'form-submit', 'id'=>'edit-submit-button'));
echo $this->Form->end();
?>
创建控制器时,请自己思考....这是一个主要实体吗?它需要多种方法......
比如....我需要用户在CakePHP中登录....用户应该是控制器,方法是“登录”