每个URL路由是否有单独的Laravel控制器?

每个URL路由是否有单独的Laravel控制器?,laravel,lumen,Laravel,Lumen,我正在构建一个RESTAPI服务器(实际上是Lumen,而不是Laravel),它具有多个端点,允许对用户、帐户和产品等资源执行各种操作。例如,以下是我为用户资源定义的路由: GET /v1.0/user POST /v1.0/user GET /v1.0/user/{username} PUT /v1.0/user/{username} DELETE /v1.0/user/{username} $router->get('/v1.0/user', 'UserController@lis

我正在构建一个RESTAPI服务器(实际上是Lumen,而不是Laravel),它具有多个端点,允许对用户、帐户和产品等资源执行各种操作。例如,以下是我为用户资源定义的路由:

GET /v1.0/user
POST /v1.0/user
GET /v1.0/user/{username}
PUT /v1.0/user/{username}
DELETE /v1.0/user/{username}
$router->get('/v1.0/user', 'UserController@listAll');
$router->post('/v1.0/user', 'UserController@createUser');
$router->get('/v1.0/user/{username}', 'UserController@getUser');
$router->put('/v1.0/user/{username}', 'UserController@updateUser');
$router->delete('/v1.0/user/{username}', 'UserController@deleteUser');
目前,我在单个控制器中定义了特定资源的所有这些API路由。例如,以下是我的用户资源路由:

GET /v1.0/user
POST /v1.0/user
GET /v1.0/user/{username}
PUT /v1.0/user/{username}
DELETE /v1.0/user/{username}
$router->get('/v1.0/user', 'UserController@listAll');
$router->post('/v1.0/user', 'UserController@createUser');
$router->get('/v1.0/user/{username}', 'UserController@getUser');
$router->put('/v1.0/user/{username}', 'UserController@updateUser');
$router->delete('/v1.0/user/{username}', 'UserController@deleteUser');
一些控制器逻辑变得非常复杂,我现在发现我的控制器文件变得非常非常长。我现在想,我应该为每个路由使用一个单独的控制器文件,以使代码更易于维护

我的问题是,在文件/文件夹命名或结构方面,我是否应该遵循任何习惯用法或约定。我是否应该在每个资源的控制器下创建一个子文件夹(例如:Controllers/User/UserCreateController.php)?或者这完全是个人选择的问题?

您应该检查哪些只使用
\u invoke()
方法,并且可以处理单个路由


顺便说一句,我通常看到的是,当控制器逻辑变得复杂时,是时候进行重构,并将这种复杂性转移到控制器之外。

您不需要创建子文件夹或多个控制器。使用单个控制器用户控制器,该控制器仅包含每条路线的入口点。通过创建负责流程的类或类组,将业务逻辑移到控制器之外

例如:您可以在app folder下创建另一个目录Libraries,并在Libraries下创建一个类User,该类包含用户资源的所有功能

app/Libraries/User.php

namespace App\Libraries;

class User {}
现在,您可以使用用户控制器中的名称空间访问此类和函数

namespace App\Http\Controllers;

use App\Libraries\User;

class UserController extends Controller {}

您在控制器方法中所做的是使其变得复杂,您不需要验证,也不需要像控制器中的东西一样的查询。