2016-11-27 6 views
1

サービスプロバイダの方法を使用して独自のカスタムlaravelカスタム検証ルールを作成しようとしています。Laravelカスタム検証の戻りメソッドが存在しません

私はapp/Services/CustomValidator.php

<?php 

namespace App\Services; 

class CustomValidator extends \Illuminate\Validation\Validator { 

    public function __construct($translator, $data, $rules, $messages = array(), $customAttributes = array()) 
    { 
     parent::__construct($translator, $data, $rules, $messages, $customAttributes); 
     $this->setCustomMessages([ 
      'not_empty_string'=> 'The field must not be empty' 
     ]); 
    } 

    public function validateNotEmptyString($attribute, $value, $parameters) 
    { 
     return (bool) preg_match('/""/', $value); 
    } 
} 

?> 

内部に格納し、私のプロバイダはプロバイダフォルダ

<?php 

namespace App\Providers; 

use Validator; 
use Illuminate\Support\ServiceProvider; 
use App\Services\CustomValidator; 

class CustomValidationServiceProvider extends ServiceProvider 
{ 
    /** 
    * Bootstrap the application services. 
    * 
    * @return void 
    */ 
    public function boot() 
    { 
     Validator::resolver(function($translator, $data, $rules, $messages) 
     { 
      return new CustomValidator($translator, $data, $rules, $messages); 
     }); 
    } 

    /** 
    * Register the application services. 
    * 
    * @return void 
    */ 
    public function register() 
    { 
     // 
    } 
} 

内に格納されていると私は私のconfig/app.phpにプロバイダを追加している、次のを思い付きました

'providers' => [ 

    /* 
    * Laravel Framework Service Providers... 
    */ 
    Illuminate\Auth\AuthServiceProvider::class, 
    Illuminate\Broadcasting\BroadcastServiceProvider::class, 
    Illuminate\Bus\BusServiceProvider::class, 
    Illuminate\Cache\CacheServiceProvider::class, 
    Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, 
    Illuminate\Cookie\CookieServiceProvider::class, 
    Illuminate\Database\DatabaseServiceProvider::class, 
    Illuminate\Encryption\EncryptionServiceProvider::class, 
    Illuminate\Filesystem\FilesystemServiceProvider::class, 
    Illuminate\Foundation\Providers\FoundationServiceProvider::class, 
    Illuminate\Hashing\HashServiceProvider::class, 
    Illuminate\Mail\MailServiceProvider::class, 
    Illuminate\Pagination\PaginationServiceProvider::class, 
    Illuminate\Pipeline\PipelineServiceProvider::class, 
    Illuminate\Queue\QueueServiceProvider::class, 
    Illuminate\Redis\RedisServiceProvider::class, 
    Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, 
    Illuminate\Session\SessionServiceProvider::class, 
    Illuminate\Translation\TranslationServiceProvider::class, 
    Illuminate\Validation\ValidationServiceProvider::class, 
    Illuminate\View\ViewServiceProvider::class, 

    /* 
    * Application Service Providers... 
    */ 
    App\Providers\AppServiceProvider::class, 
    App\Providers\AuthServiceProvider::class, 
    App\Providers\EventServiceProvider::class, 
    App\Providers\RouteServiceProvider::class, 
    Laravel\Spark\Providers\SparkServiceProvider::class, 
    App\Providers\SparkServiceProvider::class, 
    Laravel\Cashier\CashierServiceProvider::class, 

    //custom classes 

    Felixkiss\UniqueWithValidator\UniqueWithValidatorServiceProvider::class, 
    App\Providers\CustomValidationServiceProvider::class 
], 

私が追加したプロバイダは、競合すると思われます私は実際に他のプロバイダの方法であり、次のようなエラーが出て

private $rules = [ 
       'name' => 'required|unique_with:tests,suite_id', 
       'description' => 'not_empty_string|required', 
       'expected_result' => 'not_empty_string|required', 
       'suite_id' => 'required', 
       'project_id' => 'required', 
      ]; 

のようなルールを検証しようとするたびとしてFelixkiss Provider番目。私はこの本ですべてをやったように見えるので、ここで何が問題なのか分かりません。

enter image description here

+2

これが役立つかどうかを確認してください。https://github.com/felixkiss/uniquewith-validator/issues/4 –

+0

ありがとうございました。うまくいけば、これで解決できます。 – Bazinga777

答えて

0

だけ@Zamronyでコメントを経て、溶液をuniquewith-バリを拡張し、それはいつものようにビジネスの当時呼び出すことです。

<?php 

namespace App\Services; 

class CustomValidator extends \Felixkiss\UniqueWithValidator\ValidatorExtension { 

    public function validateNotEmptyString($attribute, $value, $parameters) 
    { 
     $this->setCustomMessages([ 
      'not_empty_string'=> 'The field must not be empty' 
     ]); 

     return (bool) preg_match('/""/', $value); 
    } 
} 

?> 

私は、このソリューションがどのように完璧ではないと確信していますが、それは私のために動作します。

関連する問題