0

私はLaravel アプリケーションを研究していますが、このアプリケーションで奇妙な動作を見つけました。

このアプリケーションには、いくつかの Web フォームがあります。POST リクエストを処理するコントローラー メソッドのほとんどは、Validator::make()ユーザー入力の検証に使用されますが、まったく使用しないメソッドが 2 つ見つかりましたValidator::make()

最初は、これら 2 つのフォームには入力の検証がないと思っていました。しかし、驚くべきことに、Web フォームでもユーザー入力を検証できることがわかりました。

例 1: (バリデーターを使用)

  1. コントローラの方法 1 (60 ~ 67 行目)
  2. コントローラの方法 2 (62 ~ 68 行目)

$rules = array(
    'title'   => 'required|min:3',
    'content' => 'required|min:3'
);
...
$validator = Validator::make(Input::all(), $rules);

例 2: (バリデーターを使用しない場合)

  1. コントローラーの方法 3 (89 ~ 111 行目)
  2. コントローラメソッド 4 (27 ~ 47 行目)

$this->user->username = Input::get( 'username' );
$this->user->email = Input::get( 'email' );
$this->user->password = Input::get( 'password' );
...
$this->user->save();

例 2Validatorの関数が、 ?を使用せずにユーザー入力を検証できる理由を知りたいです。

4

1 に答える 1

2

このアプリケーションのユーザー モデルは、ConfideUser特性を使用します。confide パッケージのそのトレイトを見るとsave()、Laravel のデフォルトのものをオーバーライドするメソッドがあることがわかります。

/**
 * Overwrites the original save method in order to perform
 * validation before actually saving the object.
 *
 * @param array $options
 *
 * @return bool
 */
public function save(array $options = array())
{
    if ($this->isValid()) {
        return parent::save($options);
    }
    return false;
}

すべてが問題ない場合にのみ、呼び出し$this->isValid()て保存します。そして、ここにありますisValid()

/**
 * Checks if the current user is valid using the ConfideUserValidator.
 *
 * @return bool
 */
public function isValid()
{
    // Instantiate the Zizaco\Confide\UserValidator and calls the
    // validate method. Feel free to use your own validation
    // class.
    $validator = App::make('confide.user_validator');
    // If the model already exists in the database we call validate with
    // the update ruleset
    if ($this->exists) {
        return $validator->validate($this, 'update');
    }
    return $validator->validate($this);
}

confide 自身のインスタンスを作成し、それをUserValidator使用して現在のモデルを検証します。

于 2015-01-14T13:31:20.123 に答える