0

5年遅れてプロのプログラミングに戻ったので、最初から学びました;)最初のフレームワークにKohanaフレームワークを選択しました。今、最初のアプリケーションを構築しようとしていますが、小さな問題があります。始めましょう.

デフォルトのAuthモジュールのユーザーテーブルにはデフォルトのフィールド(ユーザー名、パスワード、lastlogin)があることを知っているので、私はKohana ORMとAuthモジュールを使用します:

  • 新しいテーブルの作成 (user_additionals)
  • 新しいモデルの作成 (User_Additional)

モデルは次のようになります: http://pastie.org/private/412jflfoifyqs46uaxmga - 特別なことはありません。$user->additional->firstname などのように簡単に参照できます。

現時点では、管理パネル (管理者はすべてのユーザーを編集できます) と... すべてのフィールドがあります。名、姓、生年月日のような 10 個のフィールドがフォームとして表示されます (記入済みのフォーム - テンプレートの割り当てによって読み込まれたプレースホルダー)。ここに私の小さな問題があります: 管理者がユーザーの署名を編集する必要がある場合、多くのフィールドから 1 つを編集できるようにしたいまたは別のもの - 彼は利用可能な多くのフィールドから 1 つのフィールドを編集し、[送信] をクリックするのは簡単です - 1 つのフォームが更新されました。

しかし、次のようなものを使用しようとすると: $edit = ORM::Factory('User_Additional')->values($_POST); 検証例外が発生します(これはキャッチされますが、ここに検証エラーがあります-モデルはすべてのフィールドを空にする必要がありました...(検証ルールによる)

私は一時的な解決策を使用していますが、完全主義者であり、最初から良いコードを作成したいので、ここで私のコードを見つけることができます: http://pastie.org/private/axtwxbt66gtvcwiv97hvlq 私の解決策は 29 行目 (上のリンク) から始まります。

だから私の質問は: *このような場合に検証から例外を作成する方法は?? * *アクション /admin/edituser/ などの検証から例外を作成するにはどうすればよいですか? * *どうすれば私のモデルコードをより良くすることができますか? 私を助けることができる提案をありがとう*

ありがとう!

4

1 に答える 1

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')));
于 2013-01-06T07:15:01.720 に答える