2016-03-19 38 views
0

嗨,我已經閱讀並研究了kohana orm和auth模塊。所以我想實現我的網站管理部分。我得到上面的錯誤,我已經谷歌搜索,但似乎無法找到答案。現在用的Kohana 3.3.4 所以創建控制器名爲admin:call_user_func_array()期望參數1是一個有效的回調,沒有數組或字符串給定Kohana 3.3.4

<?php defined('SYSPATH') or die('No direct script access!'); 

class Controller_Admin extends Controller_Dev 
{ 
    public $template = 'login_template'; 

    public function action_index() 
    { 
     if (Auth::instance()->logged_in()) { 
      $this->redirect->body('admin/dashboard', 302); 
     } 
     $this->redirect('admin/login'); 
    } 

    //lets login user 
    public function action_login() 
    { 
     $view = new View('admin_login'); 
     $this->template->title = "Log in"; 
     if ($_POST) { 
      $user = ORM::factory('user'); 
      $status = $user->login($_POST); 
      if ($status) { 
       $this->redirect('admin/dashboard', 302); 
      } 
      else { 
       $errors = $_POST->errors('admin/login'); 
      } 
     } 

     // Display the login form 
     $this->template->content = $view; 
    } 

    //lets logout user 
    public function action_logout() 
    { 
     Auth::instance()->logout(); 
     $this->redirect('admin/login', 302); 
    } 

    //lets register new users 
    public function action_register() 
    { 
     $view = View::factory('admin_register') 
      ->set('values', $_POST) 
      ->bind('errors', $errors); 
     $this->template->title = "Registration Page"; 

    if ($_POST) 
    { 
     $user = ORM::factory('User'); 
      // The ORM::values() method is a shortcut to assign many values at once 

     /* $external_values = array(
      // The unhashed password is needed for comparing to the password_confirm field 
      'password' => Arr::get($_POST, 'password'), 
     // Add all external values 
     ) + Arr::get($_POST, '_external', array()); 
     $extra = Validation::factory($external_values) 
      ->rule('confirm_password', 'matches', array(':validation', ':field', 'password')); */ 

     try 
     { 
      //$test = $extra; //Arr::get($_POST, 'password'); 
      //$view->test = $test; 
      $data = $this->request->post(); 
      $user->register($data); 
      // Redirect the user to his page 
      $this->redirect('admin/login'); 
     } 
     catch (ORM_Validation_Exception $e) 
     { 
      $errors = $e->errors('models'); 
     } 
    } 

    $this->template->content = $view; 
    } 

,我創建了一個用戶模式,幫助我之前驗證新的用戶帳戶將其保存到數據庫:

<?php defined('SYSPATH') or die('No direct access allowed.'); 

class Model_User extends Model_Auth_User { 
    //public $_table_name = 'users'; 

    protected $_has_many = array(
      'user_tokens' => array('model' => 'user_token'), 
      'roles'   => array('model' => 'role', 'through', 'roles_users'), 
      // for facbook, google+, twitter and yahoo indentities 
      'user_identity' => array(), 
     ); 

    protected $_ignored_columns = array('confirm_password'); 

    public function rules() 
    { 
     return array(
      'username' => array(
       array('not_empty'), 
       array('min_length', array(':value', 4)), 
       array('max_length', array(':value', 32)), 
       array(array($this, 'username_available')), 
      ), 
      'password' => array(
      'not_empty' => NULL, 
      'min_length' => array(5), 
      'max_length' => array(42), 
     ), 
     'password_confirm' => array(
      'matches' => array('password'), 
     ), 
     'email' => array(
      'not_empty' => NULL, 
      'min_length' => array(4), 
      'max_length' => array(127), 
      'email'  => NULL, 
     ), 
     ); 
    } 

    public function filters() 
    { 
     return array(
      'password' => array(
       array(array($this, 'hash_password')), 
      ), 
     ); 
    } 

    public function username_available($username) 
    { 
     // There are simpler ways to do this, but I will use ORM for the sake of the example 
     //return ORM::factory('Member', array('username' => $username))->loaded(); 
     // Check if the username already exists in the database 
     return ! DB::select(array(DB::expr('COUNT(username)'), 'total')) 
      ->from('users') 
      ->where('username', '=', $username) 
      ->execute() 
      ->get('total'); 
    } 

    public function hash_password($password) 
    { 
     // Do something to hash the password 
    } 

    public function register($array) 
    { 
     $this->values($array); 
     $this->save(); 
     // Create a new user record in the database 


     // Save the new user id to a cookie 
     cookie::set('user', $id); 

     return $id; 
    } 
} 

當我訪問管理員註冊頁面。它不能顯示它說的錯誤:

ErrorException【警告】:call_user_func_array()預計參數1是一個有效的回調,沒有數組或字符串給

所以請幫助我,因爲我覺得我可能會錯過一些東西。先謝謝你們。我正在使用Kohana 3.3.4

+0

Model :: $規則的驗證規則和額外的驗證它們有不同的語法。你在模型中混合它。 「密碼」和「電子郵件」規則是錯誤的。 – bato3

+0

ok @ bato3。感謝您的評論。你能告訴我一個更好的方式來實現認證系統嗎? – ERSS

+0

我不知道,我的方式更好,但我使用本地模塊:https://kohanaframework.org/3.2/guide/auth + ORM驅動程序:https://kohanaframework.org/3.3/guide- api/Auth_ORM – bato3

回答

相關問題