在页面顶部进行登录

时间:2011-12-10 17:44:45

标签: cakephp

我有一个用户名,密码和提交按钮的视图。这个视图被称为login.ctp,所以我在CakePHP之前的方式是在页面顶部有一个<div>,在<div>中,所有登录都可以看到这些页面基本上你可以从任何地方登录,我使用的是AJAX。我现在的问题是我不知道如何在CakePHP中执行此操作,因为其他一些视图都有<form>标记,我认为登录也需要<form>标记?所以他们发生冲突......还有两件事

  1. 如何将该div放回页面顶部并使其与UsersController中的登录功能一起使用?

  2. 我怎样才能使<forms>不冲突?

  3. 相关代码

    <?php
    class UsersController extends AppController {
    
        var $uses = array("User");
        var $components = array('Auth', 'Session');
    
    
        function index()
        {
            $this->set('users', $this->User->find('all'));
             $this->layout = 'master_layout';
        }
    
        function beforeFilter() {
           $this->Auth->allow('add');
          } 
    
          function add() { 
    
              if (!empty($this->data)) {
                 //pass is hashed already
                 //->data['User']['password'] = $this->Auth->password($this->data['User']['password']);
                 if ($this->User->save($this->data)) {
                    $this->Session->setFlash('Your were registered!.');
                                   $this->redirect(array('action' => 'index'));
                 }
              }
    
             $this->layout = 'master_layout';
          }
    
        //IF THE DATABASE IS SET UP CORRECTLY CAKE AUTHENTICATES AUTOMATICALLY NO
        //LOGIC IS NEEDED FOR LOGIN http://book.cakephp.org/view/1250/Authentication
        function login() {
            $this->layout = 'master_layout';
            $this->data['User']['password'] = '';
    
        }
    
        function logout() {
    
        $this->redirect($this->Auth->logout());
    
        }
    
    }
    ?>
    

1 个答案:

答案 0 :(得分:1)

这很简单。如果要在不止一个页面上重复表单,则应使用元素。在app / views / elements文件夹中创建loginform.ctp文件,只需将<?php echo $this->element('loginform'); ?>放在任意位置即可。在您的loginform.ctp文件中,您应该具有以下内容:

<div id="loginform">
<?php echo $form->create('User', array('controller' => 'Users','action' => 'login')); ?>
<?php echo $form->input('email', array('label' => 'Email'))    ?>
<?php echo $form->input('password',array('type'=>'password', 'label' => 'password')) ?>
<?php echo $form->submit('Submit'); ?>
</div>

只要您指定表单所针对的控制器和操作,Cake就会处理它,以便表单不会发生冲突。

如果这不起作用,请尝试使用html:

<form id="UserLoginForm" method="post" action="/users/login" accept-charset="utf-8"><div style="display:none;"><input type="hidden" name="_method" value="POST" /></div><ul>
<li><div class="input text required"><label for="UserEmail">Email</label><input name="data[User][email]" type="text" class="field text large" maxlength="255" value="" id="UserEmail" /></div></li>
<li><div class="input password"><label for="UserPassword">password</label><input type="password" name="data[User][password]" class="field text large" value="" id="UserPassword" /></div></li>
<li><div class="submit"><input type="submit" value="Submit" /></div></li>
</ul>
</form>