2

私は最近Laravel 4を試していて、カスタム検証クラスを機能させようとしています。

検証クラス

<?php

class CountdownEventValidator extends Validator {

    public function validateNotFalse($attribute, $value, $parameters) {
        return $value != false;
    }

    public function validateTimezone($attribute, $value, $parameters) {
        return !empty(Timezones::$timezones[$value]);
    }

}

私のルールは次のように設定されています:

protected $rules = [
    'title' => 'required',
    'timezone' => 'timezone',
    'date' => 'not_false',
    'utc_date' => 'not_false'
];

次のように、モデル内で Validator を呼び出します。

$validation = CountdownEventValidator::make($this->attributes, $this->rules);

次のエラーが表示されます。

BadMethodCallException

メソッド [validateTimezone] は存在しません。

かなりの数のチュートリアルを調べましたが、コードの何が問題なのかを見つけることができませんでした。

ご協力ありがとうございました

マックス

4

2 に答える 2

1

メソッド自体は非静的ですが、Validator::make呼び出すと実際に呼び出しています。Illuminate\Validation\Factory::makeクラスにヒットするValidatorと、ファサードを通過し、バックグラウンドで呼び出しは次のようになります。

App::make('validator')->make($this->attributes, $this->rules);

次に、 のインスタンスを返しますIlluminate\Validation\Validator

独自のルールを にValidator::extend登録するか、独自のリゾルバーを登録できます。今のところ、を使用して独自のルールでバリデーターを拡張することをお勧めしますValidator::extend

Validator::extend('not_false', function($attribute, $value, $parameters)
{
    return $value != false;
});

これと、独自のリゾルバーを登録する方法については、公式ドキュメントを参照してください。

于 2013-06-04T01:32:10.957 に答える
0

その関数は静的であるはずですか?を削除するとどうなりますstaticか?

public function validateTimezone($attribute, $value, $parameters) {
    return !empty(Timezones::$timezones[$value]);
}
于 2013-06-03T13:09:22.013 に答える