如何从具有已存在的Validator类的命名空间调用Validator

时间:2015-01-15 22:09:36

标签: php laravel laravel-4 phpspec psr-4

我正在尝试在phpspec中测试一个函数,该函数调用Laravel的Validator::make函数(http://laravel.com/docs/4.2/validation

但是,我正在尝试从已经采用Validator类名称的命名空间中调用相同的函数。如何调用文档中描述的函数?

解决方案失败:

尝试1

return \Illuminate\Validation\Validator::make($values,$rules);

给了我

Call to undefined method Illuminate\Validation\Validator::make()

尝试2

return \Illuminate\Validation\Factory::make($values,$rules);

给了我

Using $this when not in object context in /vendor/laravel/framework/src/Illuminate/Validation/Factory.php on line 92. Factory

尝试3

use \Validator;

给了我

Cannot declare class Isoform\Validator because the name is already in use

尝试4

use \Validator as DefaultValidator;

给了我

Class 'DefaultValidator' not found

3 个答案:

答案 0 :(得分:1)

return \Illuminate\Support\Facades\Validator::make($values,$rules);

这会导致phpspec出错,但这是无法避免的。虽然Validator::make看起来像一个静态函数 - 在幕后它实际上是返回一个实例。因为我使用的是phpspec,所以没有创建该实例,因此错误。

答案 1 :(得分:0)

只需使用一个正斜杠来引用全局命名空间:

return \Validator::make($values,$rules);

答案 2 :(得分:0)

我解决了那个问题。只需从use Validator删除vendor\laravel\framework\src\Illuminate\Validation\Validator.php,然后将use Validator代码添加到控制器即可。然后你就可以采取行动了。

$validator = Validator::make($request->all(), $rules);