对复合唯一键的雄辩验证

时间:2013-09-13 08:20:30

标签: validation laravel eloquent

我在https://github.com/illuminate/database使用Eloquent外部laravel框架。 以下是我的作曲家文件

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

并且因为Validator :: make()中的问题。我正在使用stackoverflow中建议的方法之一来使用它像

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,in等。但是我无法验证两列或三列的唯一键索引。我试过了https://github.com/felixkiss/uniquewith-validator。但它从Validator扩展而来。它对我有用。而且我不确定laravel是否有办法处理复合唯一键的验证。他们的例子在文档中并不清楚。

您能否建议一种解决复合唯一密钥验证的方法?

1 个答案:

答案 0 :(得分:2)

在我的情况下某些规则(例如:唯一)无效,因为您需要在工厂中设置presenceValidator。我设法了,这是我的方法:

创建自己的类(MyModel),扩展Eloquent模型并添加此方法:

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;

最后(我没有使用dhorrigan胶囊,但它可能有用):

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

现在,您可以使用基于数据库的唯一验证规则和其他规则。

希望它有所帮助!