自定义";请求";找不到类


Custom "Request" class is not found

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

https://mattstauffer.co/blog/laravel-5.0-form-requests#2.-创建控制器

但我总是收到一个错误,说找不到"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找不到。。。

对于那些在遵循上述答案后仍有问题的人,我发现了可能发生此错误的另一个潜在原因。这个错误是错误的,对我来说,有一个解析错误:我的请求中有语法错误(规则数组中缺少逗号(。请仔细检查您的文件是否有错误!!

我是在呼叫拔出头发并在控制器的store()方法中写下:new MyCustomRequest()后发现的。

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

php artisan make:request ContactsRequest 

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

app/Http/Requests

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

public function somefunction(Requests'ContactsRequest $request)

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

最后,我们找到了答案。当我无法找到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,因为它会带来不可预测的自动加载行为