2016-07-20 11 views
0

Ich bin neu bei CakePHP und kann ein Login-Formular nicht validieren. Ich erhalte den folgenden Fehler: Hinweis (8): Undefinierte Variable: Benutzer [APP/Template \ Benutzer \ login.ctp, Zeile 5]Kann das Formular nicht validieren CakePHP 3

Ich habe bereits versucht, diesen Code zu verwenden: <?= $this->Form->create('User'); ?> Der Fehler wird entfernt, aber die Validierung funktioniert nicht.

Kann mir jemand helfen?

login.ctp:

<br> 
<div class="index large-4 medium-5 large-offset-4 medium-offset-4 columns"> 
    <div class="panel"> 
     <h2 class="text-center">Login</h2> 
     <?= $this->Form->create($user); ?> 

      <?php 

      echo $this->Form->input('email'); 
      echo $this->Form->input('password'); 
       ?> 

      <?= $this->Form->submit('Login', array('class' => 'button')); ?> 

     <?= $this->Form->end(); ?> 
    </div> 
</div> 

Login-Funktion - UsersController.php:

// Login 

    public function login() 
    {  

     if($this->request->is('post')) 
     { 
      $user = $this->Auth->identify(); 

      if($user) 
      { 
       $this->Auth->setUser($user); 
       return $this->redirect(['controller' => 'comentario']); 
      } 

      // Erro no Login 

      $this->Flash->error('Erro de autenticação'); 
     } 


    } 
+0

Zuerst müssen Sie es zuerst lesen. Das wird Ihnen klar machen, was Sie wollen: http: //book.cakephp.org/3.0/en/tutorials-and-examples.html – pradeep

+0

Mein Register.ctp hat eine funktionierende Validierung. Ich möchte nur wissen, warum ich login.ctp nicht validieren kann. Und ich lese bereits diese Tutorials, danke für die Antwort. – Denis

+0

Benutzer validieren oder Formularfeld validieren – pradeep

Antwort

0

Zunächst einmal diese Zeile ändern

<?= $this->Form->create($user); ?> 

auf diese

<?= $this->Flash->render('auth') ?> 
<?= $this->Form->create() ?> 

Dann können Sie Ihre einreichen wie diese

<?= $this->Form->button(__('Login')); ?> 

Stellen Sie sicher, erstellen UsersTable.php vereinfachen in Sie src/Model/Table und setzen diesen Code

// src/Model/Table/UsersTable.php 
namespace App\Model\Table; 

use Cake\ORM\Table; 
use Cake\Validation\Validator; 

class UsersTable extends Table 
{ 

    public function validationDefault(Validator $validator) 
    { 
     return $validator 
      ->notEmpty('username', 'A username is required') 
      ->notEmpty('password', 'A password is required') 
    } 

} 

Es ist nicht gut mit Redirect den spezifischen Controller innerhalb Login-Methode. Ändern Sie es:

return $this->redirect($this->Auth->redirectUrl()); 

sagen Sie dann Ihre Auth Komponente in dem Benutzer nach dem Login

$this->loadComponent('Auth', [ 
     'loginRedirect' => [ 
      'controller' => 'Articles', 
      'action' => 'index' 
     ], 
     'logoutRedirect' => [ 
      'controller' => 'Pages', 
      'action' => 'display', 
      'home' 
     ] 
    ]); 

umleiten werden sollte, und das wichtigste. Gelesen Authentication and Authorization Tutorial