Lumen 5.5 在每个json响应中发送一个默认参数

Posted

技术标签:

【中文标题】Lumen 5.5 在每个json响应中发送一个默认参数【英文标题】:Lumen 5.5 Send a default parameter in each json response 【发布时间】:2018-06-19 15:08:18 【问题描述】:

我正在寻找一种在每个 JSON 响应中发送附加参数以向用户发送当前订阅状态的方法。

我正在检查App\Http\Middleware 中的订阅状态,它检查用户订阅状态并处理请求,如果我可以从中间件发送全局参数,那就太好了。

【问题讨论】:

【参考方案1】:

您可以使用 After Middleware 来执行此操作。

中间件运行后调用了控制器方法,这意味着您可以在响应之前修改响应(添加您的密钥)发送到浏览器。

例如:

<?php

namespace App\Http\Middleware;

use Closure;

class AddSubscription

    public function handle($request, Closure $next)
    
        $response = $next($request);

        $data = $response->getData();
        $data['subscription'] = getSubscriptionData(); // Put your subscription data here
        $response->setData($data);

        return $response;
    

查看文档:https://lumen.laravel.com/docs/5.5/middleware#defining-middleware(滚动到中间件之前/之后

【讨论】:

太棒了!谢谢你。 你好@jamesking56,我收到undefined function getData,以防我的代码中存在语法错误并且laravel返回显示错误的html响应。你能建议我如何处理这个问题,就好像我使用isset($response-&gt;getData()) 它会抛出cannot use isset on a expression @Puneee 请发布新的 Stack Overflow 帖子,显示错误代码。【参考方案2】:

您可以在模型中使用 append 并像这样为该参数设置突变

protected $appends = ['subscribed'];

public function getSubscribedAttrubite() 
  // you login of checking the the subscriber has subscription 

【讨论】:

感谢您的建议,该应用程序有 10 种不同的模型,将来还会有更多,所以我认为这不是实现此功能的正确方法。我正在寻找完整应用程序的全球解决方案。 你可以将它添加到一个特征中,并在你想从它扩展的所有模型中使用它 我有一个工作解决方案,我到家时会回复 我不能为每个响应使用模型,有时我会从多个模型中生成有效负载。【参考方案3】:

如果你把它添加到其他控制器扩展的主控制器中会怎样

public function respondJson($message,$status,$statusCode=200,$headers=[])

    return response()->json([
          'data'=>[
                    message'=>$message,
                   'subscriptionStatus'=>$status
                  ]
           ],$statusCode,$headers);

在您的控制器中,您可以这样称呼它

$this->respondJson('some message',$status);

【讨论】:

谢谢,@Mahdi,这很有用,但不是完整的解决方案,因为我必须更改 100 多个控制器功能来实现它。

以上是关于Lumen 5.5 在每个json响应中发送一个默认参数的主要内容,如果未能解决你的问题,请参考以下文章

Lumen 5.7 JSON 响应限制

Lumen:在 routes.php 第 17 行:升级到 5.5 后调用未定义的方法 Laravel\Lumen\Application::post()。*

如何在 Laravel Lumen 8 中设置响应的 cookie

Laravel 5.5 发送电子邮件没有响应 smtp.gmail.com #10060

如何在 Laravel/Lumen 中捕获 401 响应?

Laravel 5.5发送邮件