我正在尝试在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
......
答案 0 :(得分:8)
对于那些在按照上述答案后仍然有问题的人,我发现了可能发生此错误的另一个可能原因。该错误是错误的,对我来说有一个解析错误:我的请求中的语法错误(规则数组中缺少逗号)。所以仔细检查你的文件是否错误!!
我在调用我的头发并在我的控制器的new MyCustomRequest()
方法中写store()
之后发现了它。
答案 1 :(得分:4)
如果您已通过以下命令正确生成请求
php artisan make:request ContactsRequest
仔细检查
下是否有名为ContactsRequest.php的文件app/Http/Requests
文件夹。如果您在该文件夹下有一个,您将能够以下列方式使用您的自定义ContactsRequest:
public function somefunction(Requests\ContactsRequest $request)
同样在您的ContactsRequest文件中,您应该将数组值设置为true而不是false。我忘记了该功能的名称,无法验证,因为我正在通过手机写这个答案。
答案 2 :(得分:1)
最后,想通了。当我无法找到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
,因为它会带来无法预测的自动加载行为