“php artisan make:controller”生成类中“use App\Http\Requests;”问题

在使用php artisan make:controller生成控制器类时,自动添加了use  App\Http\Requests;但是App\Http\Requests应该是一个命名空间,use 后面应该跟一个类吧?这里有什么意义吗?或者有什么地方会用到?

JellyBool

我个人觉得这是一个便利吧,在我们使用Form Request Validation的时候特别有用,比如我们在创建文章的时候可能会去创建一个StorePostRequest,然后在控制器中,我们typehint这个StorePostRequest的时候,默认是这样的:

public function store(Requests\StorePostRequest $request)

那么这个时候,App\Http\Requests作为命名空间就起作用了。

sodasix

@JellyBool soga, 我每次都是删掉, 然后自己写全路径 = =

abellee

我觉得这个其实不能完全当命名空间去理解,
而一个包路径,你去看一下Java之类的就知道了。
至于用处、意义之类的问题的话,举个例子吧:
假设有两个大功能块,被分别放在不同的目录下,但这两个功能里都有一个验证的需求,
那这个时候为了统一,就把两个目录下的验证的类都起名叫 Verify,如果不加路径,天知道你是在调用哪个- -!

ftrt

懂了,这个use App\Http\Requests命名空间下有个Request.php请求基类
Form Request(表单请求),我们之前的验证是放在controller里的, Form Request验证则是放在一个表单专属的请求对象里面进行。对于更复杂的验证场景,你可能想要创建一个“表单请求”。表单请求是包含验证逻辑的自定义请求类。
可以使用命令make:request: 比如php artisan make:request StoreBlogPostRequest
这样就会在app/Http/Requests里面生成一个StoreBlogPostRequest.php文件,这个StoreBlogPostRequest其实是App\Http\Requests\Request的一个扩展。
里面会有rules、message等定义好的方法,要让定义的验证生效,我们所要做的就是在控制器方法中类型提示该请求。表单输入请求会在控制器方法被调用之前被验证,这就是说你不需要将控制器和验证逻辑杂糅在一起:public function store(StoreBlogPostRequest $request){},所以上面的自动use的命名空间就帮我起到了很简便的作用。