2013-01-02 44 views
0

5年後我回到專業編程,所以我從開始學習;) 因此,我選擇Kohana框架爲我的第一個框架,我嘗試建立第一個應用程序我有一個小問題,讓我們開始吧。Kohana 3.2 - 已更改管理員的ORM更新字段

我用Kohana的ORM和驗證模塊,你知道默認的認證模塊,用戶表有默認的字段(用戶名,密碼,lastlogin)我試圖通過延長用戶:

  • 創建新表(user_additionals)
  • 創建新模型(User_Additional)

模式是這樣的:http://pastie.org/private/412jflfoifyqs46uaxmga - 沒什麼特別的。一切都會好起來的,我喜歡簡單的參考如下:$用戶> additional->姓名等

目前我有bulid管理面板(管理員可以編輯每個用戶)和......各個領域。我有10個領域,如名字,姓氏,出生日期顯示爲表(填寫的表格 - 佔位符的模板分配加載),這裏是我的小問題: 我想給管理員可能性編輯一個從多領域,如果管理員需要編輯用戶簽名或其他東西 - 他從很多可用字段中編輯一個字段,然後單擊「提交」,很容易 - 一種形式已更新。但是,如果我嘗試使用類似這樣的內容: $ edit = ORM :: Factory('User_Additional') - > values($ _ POST);我得到驗證異常(這是被捉住,但這裏有驗證錯誤 - 模型要求所有字段都是空的...(通過驗證規則)

我使用臨時解決方案,但即時通訊完美主義者,我想創造良好從begining代碼,所以在這裏你可以找到我的代碼:http://pastie.org/private/axtwxbt66gtvcwiv97hvlq 我的解決方案開始在第29行(以上鍊接)

所以我的問題是: * 如何從驗證異常的情況下這樣的?? * * 如何使從驗證異常例如用於行動/管理/ edituser /這可能嗎?* * 我該如何更好地使用我的模型代碼?感謝您的任何建議,這可以幫助我*

謝謝!

回答

0

驗證將只在「非空」領域的運行,除非你指定「not_empty」規則。 所以基本上,你可以做到以下幾點:(當你需要強制執行現場的「非空」)

class Model_User_Additional extends ORM 
{ 
    protected $foreign_key_suffix = 'user_id'; 
    protected $_primary_key = 'user_id'; 

    public function enforce_rules(array $fields) 
    { 
    $validation = Validation::factory($this->_object); 
    foreach ($fields as $field) 
    { 
     $validation->rule($field, 'not_empty'); 
    } 
    return $validation; 
    } 

    public function rules() 
    { 
    /* Removed all not_empty */ 
    return array(
     /* 'user_id' => array(
      array('not_empty'), 
     ), */ 
     'firstname' => array(
      array('text'), 
     ), 
     'lastname' => array(
      array('text'), 
     ), 
     'birthdate' => array(
      array('date'), 
     ), 
     'postprice' => array(
      array('decimal'), 
     ), 
     'articleprice' => array(
      array('decimal'), 
     ), 
     'phonenumber' => array(
      array('phone'), 
     ), 
    /*  'active' => array(
      array('not_empty'), 
     ), */ 
    /*  'lastupdate' => array(
      array('not_empty'), 
     ), */ 
     'info' => array(
      array('text'), 
     ), 

    ); 
    } 

    public function edit_user($values, $expected, $extra_validation = NULL) 
    { 
    return $this->values($values, $expected)->update($extra_validation); 
    } 
} 

的用法是:

$user = ORM::factory('User_Additional'); 
$user->values(array('field' => 'value'))->create($user->enforce_rules(array('user_id'))); 
/* and the same for updating */ 
$user->set('info', $_POST['info'])->update($user->enforce_rules(array('info')));