3

我正在尝试在框架之外使用 Laravel'4 Eloquent,因为 Illuminate/Database 包已通过 composer 独立提供。

Eloquent 本身运行良好,但我在尝试实施验证规则时被阻止了。

我首先尝试了一些像 Ardent 这样的预构建库,然后使用我自己的代码,但结果是一样的,我得到了这个致命错误:

致命错误:在第 177 行对 vendor\illuminate\support\Illuminate\Support\Facades\Facade.php 中的非对象调用成员函数 make()

当我调用 Validator::make(); 时,问题总是开始

$validator = Validator::make(
    $this->attributes,
    array('name' => 'required')
);

在调试中看起来它似乎static::resolveFacadeInstance('validator');被调用但它只是返回null

我不熟悉外墙的工作原理,谁能指出我正确的方向?谢谢!

这是我的composer.json:

{
    "require": {
        "illuminate/database": "~4.0",
        "illuminate/validation" : "~4.0",
        "laravelbook/ardent": "dev-master"
    },
    "config": {
        "preferred-install": "dist"
    },
    "minimum-stability": "dev"
}
4

2 回答 2

4

我已经在我正在从事的项目中使用它。不幸的是,没有关于如何在框架之外使用它的文档。至少存在关于如何在框架之外使用 Eloquent 的文档,但是很狡猾。

所以首先,把它放在composer.json中:

"illuminate/validation": "4.1.*",

验证对象由工厂对象生成。这个工厂对象是外观映射回的对象。因此,不要使用外观,而是像这样获取该对象:

$factory = new \Illuminate\Validation\Factory(new \Symfony\Component\Translation\Translator('en'));

然后,make您可以验证对象:

$validator = $factory->make($inputArray, $rulesArray);

到目前为止,在我发现的框架之外使用它有几个注意事项。

首先是任何依赖于数据库的验证都会失败,因为它无法查询数据库。这可以通过为验证对象提供一个Illuminate\Validation\DatabasePresenceVerifier包装数据库管理器的对象来解决,您可以从设置 Eloquent 时创建的对象中获取该对象:

$validator->setPresenceVerifier(new \Illuminate\Validation\DatabasePresenceVerifier($capsule->getDatabaseManager());

另一个是未设置默认验证消息。到目前为止,我只是通过使用make函数的第三个参数来指定每个字段的自定义规则来处理这个问题。

于 2015-04-08T16:54:02.277 回答
4

对于可能需要更多信息的人,我将在这里报告 bencorlett 在laravel 的 github repo 上给我的答案(链接)

// Store the factory instance somewhere, Maybe like:

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

        switch (count($args))
        {
            case 0:
                return $instance->$method();

            case 1:
                return $instance->$method($args[0]);

            case 2:
                return $instance->$method($args[0], $args[1]);

            case 3:
                return $instance->$method($args[0], $args[1], $args[2]);

            case 4:
                return $instance->$method($args[0], $args[1], $args[2], $args[3]);

            default:
                return call_user_func_array(array($instance, $method), $args);
        }
    }
}

$validator = Validator::make($data, $rules);
于 2013-05-15T07:20:59.517 回答