コードを調べた後、答えは「すぐに使えるものではない」です。ただし、すべてを拡張して機能させることはできます。
現時点では完全に実行する時間がありません (申し訳ありません!) プロセスは、Validator を拡張するクラスを作成し、その機能を機能させ、新しい ServiceProvider を使用して Laravel の$app['validator']
ものを独自のものに置き換えることです。
そのプロセスは、もう少し具体的には、次のようになります。
<?php namespace MyLib\Validation;
class Validator extends \Illuminate\Validation\Validator {
// Fancy validation logic to be able to set custom messages
}
次に、Factory を拡張して新しい Validator を返す必要があります。
<?php namespace MyLib\Validation;
class Factory extends \Illuminate\Validation\Factory {
// Change this method
/**
* Resolve a new Validator instance.
*
* @param array $data
* @param array $rules
* @param array $messages
* @return \MyLib\Validation\Validator
*/
protected function resolve($data, $rules, $messages)
{
if (is_null($this->resolver))
{
// THIS WILL NOW RETURN YOUR NEW SERVICE PROVIDER SINCE YOU'RE
// IN THE MyLib\Validation NAMESPACE
return new Validator($this->translator, $data, $rules, $messages);
}
else
{
return call_user_func($this->resolver, $this->translator, $data, $rules, $messages);
}
}
}
...そして最後に、検証サービス プロバイダーを拡張し、新しい Factory を使用してから、既定の ValidationServiceProvider を独自のものに置き換えます。
<?php namespace MyLib\Validation;
class ValidationServiceProvider extends \Illuminate\Validation\ServiceProvider {
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
$this->registerPresenceVerifier();
$this->app['validator'] = $this->app->share(function($app)
{
// THIS WILL NOW RETURN YOUR FACTORY SINCE YOU'RE
// IN THE MyLib\Validation NAMESPACE
$validator = new Factory($app['translator'], $app);
// The validation presence verifier is responsible for determining the existence
// of values in a given data collection, typically a relational database or
// other persistent data stores. And it is used to check for uniqueness.
if (isset($app['validation.presence']))
{
$validator->setPresenceVerifier($app['validation.presence']);
}
return $validator;
});
}
}
とにかく、これは検証ライブラリを独自のコードで拡張する 1 つの方法です。独自のメッセージを追加する問題は解決しませんでしたが、コア コードを読んでその機能を追加する方法がわかれば、アプリで機能させる方法がわかります。
最後のメモ:
検証ルール内でデータベースの「もの」を使用してLaravelがどのように処理するかを確認したい場合があります-これはアプリケーションに影響を与えないかもしれませんが(大きくならない限り!) 、何らかのリポジトリパターンValidator::extend()
を使用し、代わりにそれを呼び出しで使用することを検討してください。User
クラスの直接。必須ではありません。チェックアウトするためのメモです。
頑張ってください。RTFCを恐れないでください。