【问题标题】:Lumen inconsistent behaviour with GET requestLumen 与 GET 请求不一致的行为
【发布时间】:2016-04-26 08:29:15
【问题描述】:

对于我正在编写的 API,在我的路由文件中:

$app->get('item/{id}', 'ApiController@item');
$app->get('groupitems/{group}', 'ApiController@groupItems');

在我的控制器中,我有两个相关的功能:

public function item($id, Request $request)
{
    if ($this->isAuthorised($request->input('tenant_id'), $request->input('api_code'))) {
        $item = Line::find($id);
        if ($item) { ...

public function groupItems($id, Request $request)
{
    if ($this->isAuthorised($request->input('tenant_id'), $request->input('api_code'))) {
        $items = Line::where('tenant_id', $request->input('tenant_id'))->where('publish', true) ...

调用的方式完全相同,例如:

http://api.artlook.com/groupitems/29?tenant_id=2&api_code=o9rty43

请不要尝试,因为该 URL 目前仅在本地服务器上。

我的第一个函数运行完美。第二个返回错误异常

Argument 2 passed to groupItems() must be an instance of Illuminate\Http\Request, string given

但它们是相同的并且在同一个控制器中。帮忙?

【问题讨论】:

    标签: lumen


    【解决方案1】:

    这里的问题是,您已将参数名称声明为{group}。因此,您需要将参数变量设置为该名称:

    public function groupItems($group, Request $request)
    ...
    

    【讨论】:

    • 谢谢 - 完全正确。奇怪的是,虽然我在 Laravel 中使用了相同的代码,但它运行良好。只有在 Lumen 上它失败了。无论如何,您的更正已经完全排序,谢谢。
    • 我应该认为 Laravel 使用相同的行为。但是,这两个框架确实使用了不同的路由包。我认为 Laravel 的一个基于 Symfony 的组件,而 Lumen 使用 FastRoute。然而,说实话,我从来没有在 Laravel 中尝试过不同的变量名——从 v3 开始就没有。
    • 我在使用仅将 Request $request 作为参数的方法时遇到了同样的错误,有什么想法吗?
    猜你喜欢
    • 2017-04-04
    • 2018-01-31
    • 1970-01-01
    • 2011-12-11
    • 1970-01-01
    • 2013-11-02
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多