自定义"请求"找不到课程

时间:2015-07-04 19:03:16

标签: php laravel laravel-5

我正在尝试在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 ......

3 个答案:

答案 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,因为它会带来无法预测的自动加载行为