2013-10-08 96 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 :: __構造(...),所以使用已經測試的代碼。它的幾行不復制/粘貼。 –