【问题标题】:Laravel 4 - Validation with Validator in PackagesLaravel 4 - 在包中使用验证器进行验证
【发布时间】:2013-05-31 07:53:38
【问题描述】:

尝试在我的 Package 类中使用 Validator 类。现在有了 Facades,包含类并使用它们变得有点棘手。

use Illuminate\Validation\Validator
...
protected function valid($request)
{
  return Validator::make($request, ['url'=>'required|url'])->passes();
}

最终给了我:

PHP 致命错误:调用未定义的方法 照亮\验证\验证器::make()

这是真的,因为我没有使用 Facade 本身。查看Validator类的构造函数:

__construct(\Symfony\Component\Translation\TranslatorInterface $translator, array $data, array $rules, array $messages) : void

这就是我需要帮助的地方:)

【问题讨论】:

  • 您不使用外观的任何具体原因?
  • 我确实想使用Facade,实际上这是我在这篇文章背后的目的..

标签: laravel laravel-4


【解决方案1】:

如果您想在包中使用验证器外观,请将您的使用更改为:

use Validator;

或者:

use Illuminate\Support\Facades\Validator;

或者您可以将验证器工厂的实例(实际上是验证器实例)作为依赖项注入到类中。我假设您正在通过服务提供商设置您的包裹,所以是这样的。

$this->app->bind('Package', function($app)
{
    return new YourPackage($app['validator']);
});

然后您应该在构造函数中设置该类的验证器属性。

public function __construct(\Illuminate\Validation\Factory $validator)
{
    $this->validator = $validator;
}

您现在应该可以创建一个新的验证器实例了。

return $this->validator->make($request, ['url' => 'required|url'])->passes();

【讨论】:

  • 我建议不要使用验证器别名,因为它仅在应用程序启动时可用。使用 Illuminate\Support\Facades\Validator 或 $app['validator']
  • 我相信这适用于服务提供商,但测试呢?
  • 模拟验证器实例是进行单元测试的好方法,请查看 Mockery
  • 刚刚介绍了依赖注入方面的问题,似乎是测试的答案。
猜你喜欢
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 2014-09-26
  • 2014-01-01
  • 1970-01-01
  • 2013-05-07
  • 2014-03-09
  • 2016-02-10
相关资源
最近更新 更多