0

https://github.com/illuminate/databaseのlaravelフレームワーク外でEloquentを使用しています。以下は私の作曲家ファイルです

{
    "require": {
        "illuminate/database": "*",
        "illuminate/validation": "*",
        "dhorrigan/capsule": "*"
    }
}

そして、Validator::make() の問題のためです。私はstackoverflowで提案された方法の1つを使用して、次のように使用しています

class Validator
{

    protected static $factory;

    public static function instance()
    {
        if (!static::$factory) {
            $translator = new Symfony\Component\Translation\Translator('en');
            static::$factory = new Illuminate\Validation\Factory($translator);
        }

        return static::$factory;
    }

    public static function __callStatic($method, $args)
    {

        $instance = static::instance();

        return call_user_func_array(array($instance, $method), $args);

    }
}

これで、required などを検証できますが、2 つまたは 3 つの列の一意のキー インデックスを検証できません。https://github.com/felixkiss/uniquewith-validatorを試しました。しかし、それは Validator から拡張されています。それは私にとってはうまくいきません。そして、laravelに複合一意キーの検証を処理する方法があるかどうかはわかりません。それらの例は、ドキュメントでは明確ではありません。

複合一意キーの検証を解決する方法を提案できますか?

4

1 に答える 1

2

私の場合、ファクトリに存在するValidatorセットが必要なため、いくつかのルール(例:一意)が機能しませんでした。私はそれを管理しましたが、これが私のアプローチです:

Eloquent モデルを拡張する独自のクラス (MyModel) を作成し、次のメソッドを追加します。

public static function getResolver()
    {
        return parent::$resolver;
    }

名前空間の後のバリデータークラス (より簡単な名前):

use \Illuminate\Validation\Factory as Factory;

use \Illuminate\Validation\DatabasePresenceVerifier as DatabasePresenceVerifier;

use \Symfony\Component\Translation\Translator as Translator;

最後に(私はドリガンカプセルを使用していませんが、うまくいくかもしれません):

$translator = new Translator('en');
$container = $capsule->getContainer();            
$presenceVerifier = new DatabasePresenceVerifier(MyModel::getResolver());
static::$factory = new Factory($translator, $container);
static::$factory->setPresenceVerifier($presenceVerifier);

これで、独自の検証ルールと DB に基づくその他のルールを使用できるようになりました。

それが役に立てば幸い!

于 2013-10-25T21:03:29.417 に答える