【问题标题】:Manipulating Laravel html response just before sending it to browser在将 Laravel html 响应发送到浏览器之前对其进行操作
【发布时间】:2015-07-02 10:41:41
【问题描述】:

在将最终输出发送到浏览器之前处理最终输出的正确方法是什么? (laravel 5.*)

我已经创建了外观

namespace App\Facades;

use Illuminate\Support\Facades\Response as ResponseFacade;
use Illuminate\Http\Response as ResponseHttp;

class Response extends ResponseFacade
{

    public static function viewMod($view, $data = [], $status = 200, array $headers = [])
    {   
        $output = \Response::view($view, $data, $status, $headers);

        return some_manipulating_function($output);
    }
}

在我使用的控制器动作中

return viewMod("my_view_file", array $view_data);

但我收到损坏的输出(http 响应标头已添加到/附加到 html)

很可能\响应相关的 __toString 方法行为异常

有什么想法吗? (谢谢!)

【问题讨论】:

  • 为什么需要这样做?
  • 假设我有一些自定义标记添加到布局、视图、传递给视图的变量(因此它们是硬编码和/或从数据库中检索),我想解析
  • @AdamZygadlewicz 检查View::creator() 方法,看看它是否是做你想做的事情的更好方法。

标签: laravel laravel-5 laravel-5.1 laravel-facade laravel-response


【解决方案1】:

您可以使用AfterMiddleware,如下面的文档示例,

<?php

namespace App\Http\Middleware;

use Closure;

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

        // Perform action

        return $response;
    }
}

【讨论】:

  • 可能是一个好的开始,谢谢!但是如何修改输出?或者如何用我自己的实现替换 view("....")? :>
  • 其实你是完全正确的public function handle($request, Closure $next) { $response = $next($request); // Perform action $response-&gt;setContent(modify_content_function($response-&gt;original)); return $response;}
猜你喜欢
  • 2018-06-20
  • 2011-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-27
  • 2016-11-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多