流明:使用动作路由
Lumen: Routing using action
在我的公司,我们使用构建在 Lumen 之上的框架。我们不写路线。我们写动作。
例如:
app/api/Food/AddFoodAction.php
app/api/food/EditFoodAction.php
在你打的Postman里,如果你要加菜的话
{{host}}/api/food/AddFood
{{host}}/api/food/EditFood
一个典型的动作是这样的
class AddFoodAction
{
protected $verbs = ['POST'];
public $inputRules = [
'name' => 'required',
'description' => ''
];
public function execute()
{
$name = $this->request->get('name');
try {
...
return $this->response->statusOk();
}
catch(\Exception $ex) {
return $this->response->statusFail("");
}
}
}
我只对其中的路由部分感兴趣,从不编写路由,只编写操作的想法。我想在其他项目中使用相同的概念,而不必使用我公司使用的框架。
你知道这是怎么做到的吗?我搜索了动态路由,但那不是动态路由,你知道使用的概念名称是什么吗?
我想这是用动态 class 名称完成的,您将有一个 'real' 端点捕获所有参数,然后使用此信息您可以生成完整的类路径。
例如,如果您导航到 {{host}}/api/food/AddFood
,您的代码将提取 /food/AddFood
部分。然后解析这部分,因此它生成 app/api/Food/AddFoodAction
(即通过驼峰式大小写和 /app/api
前缀)匹配命名空间 + class 名称。
如果它存储在变量中,您可以动态调用它 class,它会产生如下内容:
// this would be dynamically build, but is hardcoded to illustrate the example
$className = "\app\api\Food\AddFoodAction";
$action = $className();
$action->execute();
希望对您有所帮助,有任何问题欢迎随时提问!
P.S。请注意名称需要使用 命名空间 而不是文件夹路径
在我的公司,我们使用构建在 Lumen 之上的框架。我们不写路线。我们写动作。
例如:
app/api/Food/AddFoodAction.php
app/api/food/EditFoodAction.php
在你打的Postman里,如果你要加菜的话
{{host}}/api/food/AddFood
{{host}}/api/food/EditFood
一个典型的动作是这样的
class AddFoodAction
{
protected $verbs = ['POST'];
public $inputRules = [
'name' => 'required',
'description' => ''
];
public function execute()
{
$name = $this->request->get('name');
try {
...
return $this->response->statusOk();
}
catch(\Exception $ex) {
return $this->response->statusFail("");
}
}
}
我只对其中的路由部分感兴趣,从不编写路由,只编写操作的想法。我想在其他项目中使用相同的概念,而不必使用我公司使用的框架。
你知道这是怎么做到的吗?我搜索了动态路由,但那不是动态路由,你知道使用的概念名称是什么吗?
我想这是用动态 class 名称完成的,您将有一个 'real' 端点捕获所有参数,然后使用此信息您可以生成完整的类路径。
例如,如果您导航到 {{host}}/api/food/AddFood
,您的代码将提取 /food/AddFood
部分。然后解析这部分,因此它生成 app/api/Food/AddFoodAction
(即通过驼峰式大小写和 /app/api
前缀)匹配命名空间 + class 名称。
如果它存储在变量中,您可以动态调用它 class,它会产生如下内容:
// this would be dynamically build, but is hardcoded to illustrate the example
$className = "\app\api\Food\AddFoodAction";
$action = $className();
$action->execute();
希望对您有所帮助,有任何问题欢迎随时提问!
P.S。请注意名称需要使用 命名空间 而不是文件夹路径