【发布时间】:2020-03-14 10:34:05
【问题描述】:
我正在用 laravel 构建一个 API,所以我试图将 Laravel 的 Eloquent 函数作为字符串传递并在控制器中执行它们,实际上我正在发送一个 JSON 对象,但我正在将它转换为后端的字符串,这就是我试着做
带参数的 API URL: http://www.example.com/api/articles?parameters={"orderByDesc":"'created_at'", "limit":"2"}
控制器端:
$json = json_decode(request('parameters'), TRUE);
$query = '';
foreach ($json as $function => $value){
$query .= $function.'('.$value.')->';
}
$query = $query.'get();';
return $query;
输出:
orderByDesc('created_at')->limit(2)->get();
现在我如何在模型上执行这个字符串作为代码,例如:
$articles = Article::orderByDesc('created_at')->limit(2)->get();
我无法像这样连接:Article::.$query 而且我不能使用 PHP 的 eval()
这个想法是在 JSON 对象中使用 Laravel 的 Eloquent 函数并将它们传递到一个 URL 参数中。
谢谢
【问题讨论】:
-
这是我见过的最可怕的事情。为什么有人这样做
-
我明白你的意思@TeomanTıngır 但这是一个内部 API,大多数 Laravel 开发人员都会使用
-
这在很多地方都是错误的。为什么不将参数(在您的情况下为 JSON)作为标准查询参数。然后在您的控制器中构造一个适当的 JSON 并继续执行。如果您确实必须发送 JSON,请在 POST 请求中发送它,而不是在 GET 中发送查询参数。还使用字符串连接来构建可执行代码是如此 hacky。请不要那样做。
-
@Prakhar 我也会考虑这个
标签: php json laravel api eloquent