0

我正在使用来自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);

    }
}

现在我可以验证所需的、in 等。但我无法验证两列或三列的唯一键索引。我尝试了https://github.com/felixkiss/uniquewith-validator。但它是从验证器扩展而来的。它对我有用。而且我不确定 laravel 是否有办法处理复合唯一键的验证。他们的例子在文档中并不清楚。

你能建议一种解决复合唯一键验证的方法吗?

4

1 回答 1

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);

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

希望能帮助到你!

于 2013-10-25T21:03:29.417 回答