php - 如何使用超薄路由器动态调用方法?
问题描述
我正在设置苗条路由器 v4,我希望能够使用路由中的占位符动态调用控制器方法。
即,当向“example.com/users/{action}”发出请求时,路由器会自动从 Users.php 控制器调用该方法,而无需我手动指定路由。
基本上,当它们都在 /user 路由下时,我试图避免手动添加超过 100 个 group->get(...) 。
namespace core\router;
use Slim\Interfaces\RouteCollectorProxyInterface;
use app\controllers\users;
$app->group('/user', function(RouteCollectorProxyInterface $group){
$group->get('/get-name', '\Users:name')
$group->get('/get-personality', '\Users:personality');
});
这里提供了进一步的解释,但我不知道该怎么做。
解决方案
我建议这样做的方法是使用一个占位符来捕获所有路线。然后,您可以将操作设置为可调用控制器,并根据路由参数执行方法。
路线:
$app->get('/user/{method}', Users::class);
控制器
class Users
{
public function __invoke(Request $request, Response $response, $args)
{
if (empty($args['method'])) {
throw new InvalidArgumentException();
}
$methodName = toCamelCase($args['method']);
if (!method_exists($this, $methodName)) {
throw new InvalidArgumentException();
}
return $this->{$methodName};
}
public function getName(Request $request, Response $response)
{
// ...
}
public function getPersonality(Request $request, Response $response)
{
// ...
}
}
推荐阅读
- vue.js - 在移动浏览器中滑动/放大/缩小时,Vuetify @click 不起作用,我不确定它是什么手势
- kubernetes - Kubernetes 扇出入口,但根域为客户端提供服务
- laravel - laravel 如何使用变量使用高级连接子句连接三个表
- android - W/StaticLayout:maxLineHeight 不应为 -1。最大行数:1 行数:1
- css - Nuxtjs nuxt-link 未在悬停时显示为指针
- javascript - 数组映射函数呈现正确,但调用函数时呈现最后一个元素
- typescript - Typescript 中的实例初始化数组:“new MyClass”是强制性的吗?
- vb.net - 如何在datagridview中检查所有内容?
- react-native - 是什么导致 React Native componentDidMount 被无限期地调用?
- kofax - 从 Kofax TotalAgility (KTA) 调用 Java JAR 文件