2016-11-27 81 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 
], 

提供者我添加似乎冲突wi日的Felixkiss Provider因为每当我尝试验证的规则像

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', 
      ]; 

我想出了下面的错误,实际上是对其他供应商的方法。我不确定这里有什么问题,因为我似乎已经完成了本书的所有工作。

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

?> 

我不知道这个解决方案是多么完美,但它适用于我。