【问题标题】:Laravel custom validation returning method doesnot existLaravel 自定义验证返回方法不存在
【发布时间】:2016-11-28 17:16:56
【问题描述】:

我正在尝试使用服务提供者的方式创建我自己的自定义 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
],

我添加的 Provider 似乎与 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',
            ];

我想出了以下错误,这实际上是其他提供程序的一种方法。我不确定这里有什么问题,因为我似乎已经按照书本做了所有事情。

【问题讨论】:

标签: php laravel laravel-5 laravel-5.2


【解决方案1】:

刚刚浏览了@Zamrony 的评论,解决方案是扩展 uniquewith-validator,然后调用它就可以正常工作了。

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

?>

我不确定这个解决方案有多完美,但它对我有用。

【讨论】:

    猜你喜欢
    • 2014-10-02
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-18
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    相关资源
    最近更新 更多