【问题标题】:Custom "Request" class is not found未找到自定义“请求”类
【发布时间】:2017-06-03 18:23:49
【问题描述】:

我正在尝试探索 Laravel 5 中的内置表单验证,如下所述:

https://mattstauffer.co/blog/laravel-5.0-form-requests#2.-create-your-controller

但我总是收到一条错误消息,提示找不到“MyRequest”类。

// My route
Route::post('/contacts', ['as' => 'contacts-store', 'uses' => 'ContactsController@store']);

// My custom request
namespace Demo\Http\Requests;
use Demo\Http\Requests\Request;

class ContactsRequest extends Request {} // now Laravel cannot find this class

// My controller
namespace Demo\Http\Controllers;

use Illuminate\Http\Request;

use Demo\Http\Requests; // namespace where I put my request to
use Demo\Http\Controllers\Controller;
use Demo\Http\Requests\ContactsRequest; // direct reference to the class

class ContactsController extends Controller
{
    public function store(ContactsRequest $request)  // this line throws exception
    {
    }
}

问题:我在控制器顶部添加了所有需要的命名空间,但 Laravel 仍然找不到我的 ContactsRequest 类,这怎么可能?

更新:我刚刚记得我用php artisan app:name Demo 更改了我的应用程序的全局名称,之后一些文件丢失了,所以我执行php composer dump-autoload 并且ContactsController 找到了我的ContactsRequest,但是现在我有另一个例外说找不到父类Request ...

【问题讨论】:

  • 您是否在 ContactsRequest 中正确声明了命名空间?把一个类放到文件夹里是不够的,可能是“namespace Demo\Http\Requests;”文件顶部缺少?
  • @jerdzej.kurylo :是的,我需要顶部的命名空间namespace Demo\Http\Requests,此外,我使用php artisan make:request ContactsRequest 生成了这个请求类,所以我相信它不应该包含错误

标签: php laravel laravel-5


【解决方案1】:

对于那些即使按照上述答案仍然存在问题的人,我发现了可能发生此错误的另一个潜在原因。该错误具有误导性,对我来说有一个解析错误:我的请求中的语法错误(规则数组中缺少逗号)。所以仔细检查你的文件是否有错误!

我在我的控制器的store() 方法中调用了我的头发并写下:new MyCustomRequest() 后发现了它。

【讨论】:

  • 是的......这是误导。在重新检查并修复规则数组中的语法错误后解决。谢谢老兄!!
  • 可以确认!使用 Laravel 5.6;抛出此错误是因为我误用了错误的验证器路径:Using Illuminate\Validation\Validator instead of Illuminate\Contracts\Validation\Validator when overriding protected function failedValidation(Validator $validator) 导致此异常。
  • 一个逗号不见了,但是错误应该是解释问题的东西,很奇怪
【解决方案2】:

如果您通过以下命令正确生成请求

php artisan make:request ContactsRequest 

仔细检查下是否有一个名为 ContactsRequest.php 的文件

app/Http/Requests

文件夹。如果您在该文件夹下有一个,您将能够通过以下方式使用您的自定义 ContactsRequest:

public function somefunction(Requests\ContactsRequest $request)

同样在您的 ContactsRequest 文件中,您应该将数组值设置为 true 而不是 false。我忘记了该函数的名称,无法验证,因为我正在用手机写下这个答案。

【讨论】:

  • 我刚刚更新了我的问题,我能够解决缺少 ContactsRequest 类的问题,但现在 Laravel 找不到默认的 Request 类,有什么建议吗?
  • 在您的自定义请求类或控制器中找不到请求?
  • 在自定义 ContactsRequest 类中找不到
  • 已解决,第二个问题似乎是我的命名空间错误
  • 很高兴听到您对它进行了排序
【解决方案3】:

终于想通了。当我找不到 ContactsRequest 类时,因为我将我的应用程序从 App 重命名为 Demo,这似乎是这里描述的常见问题:

https://laracasts.com/discuss/channels/general-discussion/l5-class-appconsolekernel-not-found

当我执行php composer dump-autoload 时,Laravel 清除了一些缓存并找到了ContactsRequest 类。

但是出现了另一个异常,说现在Request 类不存在。这次是我的错,因为我真的把它搬到了另一个地方。

结论:

  • 当您运行 php artisan app:name NewAppName 时,请确保每次生成新类时都运行 php composer dump-autoload
  • 第二个错误是我的错误,所以我需要检查父类是否有正确的命名空间
  • 除非你真的需要,否则不要使用php artisan app:name NewAppName,因为它会带来不可预知的自动加载行为

【讨论】:

  • 非常感谢!我几乎迷失了这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-21
  • 2016-03-12
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
  • 2013-07-31
  • 2019-11-11
相关资源
最近更新 更多