php - 如何在 Laravel 5.7 中添加函数名称作为路由?
问题描述
我有一个控制器,它返回各个字段的枚举。例如
// Expected route - /api/getFamilyTypes - only GET method is allowed
public function getFamilyTypes()
{
return [
'Nuclear Family',
'Joint Family'
];
}
我有大约 20 个这样的功能。如何在不手动为路由文件中的每个函数添加条目的情况下添加它?
提前致谢。
解决方案
在您的路线文件中,添加类似这样的内容,
Route::get('/something/{func}', 'SomeController@functionRoute');
something
您想要使用的路径在哪里,您正在使用SomeController
的具有 20 个功能的控制器在哪里,并且functionRoute
是我们将要执行的操作。
然后在你的控制器中,做一个这样的函数,
public function functionRoute($func)
{
return $this->$func();
}
这将使每当有人浏览/something/*
您的网站时,它都会在最后执行函数名称。因此,如果您导航到/something/getFamilyTypes
它将运行您的getFamilyTypes
功能。
这不是特别安全。如果这样做,用户将能够运行控制器的任何方法。您可以设置这样的黑名单。
public function functionRoute($func)
{
$blacklist = [
'secret',
'stuff',
];
return in_array($func, $blacklist) ? redirect('/') : $this->$func();
}
或者你可以设置一个这样的白名单,
public function functionRoute($func)
{
$whitelist = [
'getFamilyTypes',
'otherUserFriendlyStuff',
];
return in_array($func, $whitelist) ? $this->$func() : redirect('/');
}
推荐阅读
- windows - 如果发生超时,如何使用 IIS ARR 向另一台服务器发送请求?
- java - 如何使用方法在 Main.java 中打印 ArrayList?
- c++ - 为什么单击编辑框会关闭 win32 窗口(C++)?
- channel - 找到通道的面积
- numpy - numpi 与 tensorflow 2.4 上的卷积
- java - 得到错误的异常响应 (403)
- haskell - 如何在 VSCode 中找到 Haskell 函数的定义?
- controller - 我怎么无法创建新的索引方法?
- sparql - 为什么这个 wikidata SPARQL 查询缺少国家信息?
- java - Java JOOQ 使用对象将查询解析为 ArrayList