whatPart1.controller的概念1.1为什么要使用controller?我们来思考一个问题:当我们通过闭包函数来处理所有的请求处理逻辑,而不是通过控制器类来组织相关的请求处理逻辑,这会造成什么影响?这样会导致以下问题:首先,所有的请求处理逻辑都交给路由的闭包函数来处理,也就是说所有的逻辑代码都写在路由文件中。这将导致一个非常大的路由文件。其次,所有逻辑代码都写在一个文件中,会造成代码结构混乱,无法合理高效地管理代码。同样,所有的逻辑代码都混在一起,这会导致功能之间的强耦合。不符合“高内聚、低耦合”的开发原则。使用控制器的几个优点:路由定义更简洁。控制行为的路由可以缓存,但关闭路由不会缓存,路由缓存会大大减少应用路由的注册时间。controller将相关的请求处理逻辑封装到一个controller类中的不同方法中,更符合“高内聚、低耦合”的开发原则(解耦),程序的代码结构更加清晰,代码管理更容易更轻松。1.2控制器的定义抽象定义:控制器是MVC中的C层,是“承上启下”的控制转发层。从http中收集请求参数,并将这些参数传递给Model层。但是在实际开发中,我们通常会在Controller层和Model层之间抽象出Service层,专门用于业务逻辑处理。代码定义如下:受保护的$服务;公共函数__construct(请求$request,服务$service){$this->request=$request;$this->service=$service;}/***显示资源列表。**@return\Illuminate\Http\Response*/publicfunctionindex(){//return'helloworld';返回$this->service->index();}}值得指出的是,控制器并不一定要继承基类Controller。但是如果controller不继承基类,就不能使用一些方便的功能,比如middleware()、validate()和dispatch()方法。2.控制器的分类提示:为单动作控制器注册路由时,不需要命名方法。路径中的类别名称用法包含方法artisan命令基础控制器Route::get('photos','PhotoController@index');自定义phpartisanmake:controllerPhotoController单线控制器Route::get('photos',PhotoController::class);1.__invoke()phpartisanmake:controllerPhotoController--可调用资源控制器Route::resource('photos',PhotoController::class);或Route::resources(['photos'=>PhotoController::class]);7个人。index(),create(),store(),show(),edit(),update(),destroy()phpartisanmake:controllerPhotoController--resourceApi资源控制器Route::apiResource('photos',PhotoController::班级);或Route::apiResources(['photos',PhotoController::class]);5.index(),store(),show(),update(),destroy()phpartisanmake:controllerPhotoController--api补充资源控制器:如果需要在默认资源路由中添加额外的路由,需要在之前定义路线::资源;否则,资源方法定义的路由可能会无意中优先于您定义的路由Route::get('photos/popular',[PhotoController::class,'popular']);Route::resource('photos',PhotoController::班级);默认情况下,Route::resource将使用英语动词来创建资源URI。如果需要自定义创建和编辑动作的动作名称,可以在AppServiceProvider的引导中使用Route::resourceVerbs()方法。使用Illuminate\Support\Facades\Route;/***引导任何应用程序服务。**@returnvoid*/publicfunctionboot(){Route::resourceVerbs(['create'=>'crear','edit'=>'editar',]);}
