【问题标题】:Laravel can't find serviceLaravel 找不到服务
【发布时间】:2015-03-11 23:27:50
【问题描述】:

我设法创建了以下自定义验证规则:http://www.sitepoint.com/data-validation-laravel-right-way-custom-validators/
我唯一的问题是在 laravel 5 中有新的文件结构。应该是:
in <?php namespace App\Providers; ValidationExtensionServiceProvider.php
in <?php namespace App\Services; ValidatorExtended.php
但是 laravel 找不到我的 ValidatorExtended.php 如果它不在 App\Providers 中。错误:

FatalErrorException in ValidationExtensionServiceProvider.php line 11: Class 'App\Providers\ValidatorExtended' not found

我如何告诉 laravel,查看 App\Services,而不是 App\Providers?

ValidatorExtended.php:

<?php namespace App\Services;

use Illuminate\Validation\Validator as IlluminateValidator;

class ValidatorExtended extends IlluminateValidator {

    private $_custom_messages = array(
        ....
    );

    public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) 
    {
         parent::__construct( $translator, $data, $rules, $messages, $customAttributes);

         $this->_set_custom_stuff();
    } 

     ....



}

ValidationExtensionServiceProvider.php:

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ValidationExtensionServiceProvider extends ServiceProvider {

     public function register() {}

     public function boot() {
          $this->app->validator->resolver( function( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) {
              return new ValidatorExtended( $translator, $data, $rules, $messages, $customAttributes );
          }
     } 

}

【问题讨论】:

  • 尝试在项目根目录下的控制台上运行composer dump-autoload

标签: php laravel laravel-5


【解决方案1】:

您需要指定ValidatorExtended 访问器的命名空间:

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class ValidationExtensionServiceProvider extends ServiceProvider {

     public function register() {}

     public function boot() {
          $this->app->validator->resolver( function( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) {
              return new App\Services\ValidatorExtended( $translator, $data, $rules, $messages, $customAttributes );
          }
     } 
}

或在文件顶部添加使用语句:

<?php namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Services\ValidatorExtended;

class ValidationExtensionServiceProvider extends ServiceProvider {

     public function register() {}

     public function boot() {
          $this->app->validator->resolver( function( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) {
              return new ValidatorExtended( $translator, $data, $rules, $messages, $customAttributes );
          }
     } 
}

【讨论】:

  • 我实际上尝试过使用 App\Services;在发布问题之前,认为它会自行找到使用“ValidatorExtended”,实际上还没有尝试过完整路径。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 2020-07-28
  • 2016-01-08
  • 2017-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多