查看表单不起作用

时间:2013-11-14 17:35:00

标签: cakephp cakephp-2.0 cakephp-2.1 cakephp-2.3

我的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”附加到地址的末尾但从未命中该函数。

任何人都知道如何解决这个问题?

2 个答案:

答案 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中登录....用户应该是控制器,方法是“登录”