2013-10-08 4 views
5

LaravelValidator를 확장하는 사용자 지정 Laravel Validator 클래스의 일부 유효성 검사 메서드 내에서 Db 저장소에 액세스해야합니다. 그것을 얻는 방법? LaravelValidator를 확장 한 사용자 지정 Laravel Validator 클래스의 종속성 삽입

내 클래스 생성자 :

<?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; 
} 

[...] 

과 (구조에 대한 IOC의와!) 내 검사기 해결 :

<?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

validator :: resolver의 파일 경로는 무엇입니까? 어디에 두셨습니까? – user9507

+0

질문을 답변으로 표시해야합니다. @ user9507 어디서나 배치 할 수 있습니다. routes.php와 같은 디렉토리에 "validations.php"파일을 추가하고 "app_path()가 필요합니다."/ global.php에있는 validations.php ' ". 더 좋은 방법이있을 것이라고 확신합니다. –

+0

또한 parent :: __ construct (...)를 사용하므로 이미 테스트 한 코드를 사용하십시오. 그 몇 줄은 복사/붙여 넣기되지 않습니다. –

관련 문제