2013-10-08 97 views
5

我需要在Laravel Validator类的一些验证方法中访问Db存储库,Laravel Validator类扩展了LaravelValidator。如何得到它?Laravel Validator类中的依赖注入扩展了LaravelValidator

我的类的构造函数:

<?php namespace Pongo\Cms\Support\Validators; 

use Illuminate\Validation\Validator as LaravelValidator; 
use Pongo\Cms\Support\Repositories\PageRepositoryInterface as Page; 
use Pongo\Cms\Support\Repositories\ElementRepositoryInterface as Element; 

class PongoValidator extends LaravelValidator { 

    /** 
    * Class constructor 
    * @param Page $page 
    * @param Element $element 
    */ 
    public function __construct($translator, $data, $rules, $messages, Page $page, Element $element) 
    { 
     $this->page = $page; 
     $this->element = $element; 
    } 

    [...] 

和我的验证解析器(如在Laravel文档):

<?php 

/** 
* Instantiate CustomValidator class 
*/ 
Validator::resolver(function($translator, $data, $rules, $messages) 
{ 
    return new Pongo\Cms\Support\Validators\PongoValidator($translator, $data, $rules, $messages); 
}); 

如何使它工作? 谢谢

+0

莫非你请解释一下现在怎么回事?什么不工作?你得到什么错误? – KennyV

回答

4

好的...我找到了一个解决方案。

我的类的构造函数:

<?php namespace Pongo\Cms\Support\Validators; 

use Pongo\Cms\Support\Repositories\PageRepositoryInterface as Page; 
use Pongo\Cms\Support\Repositories\ElementRepositoryInterface as Element; 

use Illuminate\Validation\Validator as LaravelValidator; 

use Config, Media, Str; 

class PongoValidator extends LaravelValidator { 

    private $page; 

    private $element; 

/** 
* Class constructor 
* @param Page $page 
* @param Element $element 
*/ 
public function __construct($translator, $data, $rules, $messages, Page $page, Element $element) 
{ 
    $this->translator = $translator; 
    $this->data = $data; 
    $this->rules = $this->explodeRules($rules); 
    $this->messages = $messages; 

    $this->page = $page; 
    $this->element = $element; 
} 

[...] 

和我的验证解析器(与国际奥委会的救援!!):

<?php 

use Pongo\Cms\Support\Validators\PongoValidator; 

/** 
* Instantiate CustomValidator class 
*/ 
Validator::resolver(function($translator, $data, $rules, $messages) 
{ 
    $page = App::make('Pongo\Cms\Support\Repositories\PageRepositoryInterface'); 

    $element = App::make('Pongo\Cms\Support\Repositories\ElementRepositoryInterface')); 

    return new PongoValidator($translator, $data, $rules, $messages, $page, $element); 
}); 

希望它可以帮助别人...... 再见

+0

你的验证器::解析器的文件路径是什么?你把它放在哪里? – user9507

+0

您应该将您的问题标记为已回答。 @ user9507你可以把它放在任何地方。我在routes.php和“require app_path()。'/ validations.php'”中添加了一个“validations.php”文件,它位于global.php中。我相信有更好的方法。 –

+0

也,我使用parent :: __构造(...),所以使用已经测试的代码。它的几行不复制/粘贴。 –