2016-06-30 13 views
1

Ich arbeite in CakePHP 3.2 und schreibe ein Admin-Panel, wo nur Admin anmelden können.CakePHP Fehler: Klasse App Controller AuthComponent nicht gefunden

Es gibt eine separate Tabelle admins zum Speichern von Administratoranmeldeinformationen. Es gibt auch users Tabelle, die für Benutzer verwendet wird, um sich aus der Hauptanwendung zu registrieren/einzuloggen.

Ich muss admins Tabelle verwenden, um sich im Admin-Panel anzumelden.

Was ich getan habe ist.

<?php 
namespace App\Controller; 

use Cake\Controller\Controller; 
use Cake\Event\Event; 


class AppController extends Controller 
{ 

    public function initialize() 
    { 
     parent::initialize(); 

     $this->loadComponent('RequestHandler'); 
     $this->loadComponent('Flash'); 
     $this->loadComponent('Auth', [ 
      'loginAction' => [ 
      'controller' => 'Admins', 
      'action' => 'login', 
      'plugin' => 'Admins' 
      ], 
      'loginRedirect' => [ 
      'controller' => 'ServiceRequests', 
      'action' => 'index' 
      ], 
      'logoutRedirect' => [ 
      'controller' => 'Admins', 
      'action' => 'login' 
      ], 
      'authenticate' => [ 
      'Form' => [ 
       'userModel' => 'Admin', 
       'fields' => [ 
       'username' => 'email', 
       'password' => 'password' 
       ] 
      ] 
      ] 
     ]); 
    } 

    public function beforeRender(Event $event) 
    { 
     if (!array_key_exists('_serialize', $this->viewVars) && 
      in_array($this->response->type(), ['application/json', 'application/xml']) 
     ) { 
      $this->set('_serialize', true); 
     } 
    } 
} 

AdminsController.php

<?php 
namespace App\Controller; 

use App\Controller\AppController; 
use Cake\Event\Event; 
use App\Controller\AuthComponent; 

/** 
* Admins Controller 
* 
* @property \App\Model\Table\AdminsTable $Admins 
*/ 
class AdminsController extends AppController 
{ 
     public function beforeFilter(Event $event) 
     { 
      parent::beforeFilter($event); 
      $this->Auth->allow('add'); 
      // Pass settings in using 'all' 
      $this->Auth->config('authenticate', [ 
      AuthComponent::ALL => ['userModel' => 'Members'], 
       'Basic', 
       'Form' 
      ]); 
     } 

    public function login() 
    { 
     if ($this->request->is('post')) { 
      $user = $this->Auth->identify(); 
      if ($user) { 
       $this->Auth->setUser($user); 
       return $this->redirect($this->Auth->redirectUrl()); 
      } 
      $this->Flash->error(__('Invalid username or password, try again')); 
     } 
    } 

    public function logout() 
    { 
     return $this->redirect($this->Auth->logout()); 
    } 
} 

Aber das funktioniert nicht. und gibt Error: Class App\Controller\AuthComponent' not found

Auch ich möchte den Zugriff auf alle Controller und Aktionen ohne Anmeldung beschränken. Das ist, warum gibt es keine $this->Auth->allow() in AppsController.php

Antwort

2

use Cake\Controller\Component\AuthComponent;

+1

... und 'Regler \ Component' :) – ndm

+0

Meh ... :) Danke – burzum