当前位置: 首页 > 知识库问答 >
问题:

laravel:我可以在响应返回之前覆盖laravel代码?

庞修贤
2023-03-14

我想在响应返回的地方覆盖laravel。然后我想检测状态代码(200或301),如果请求是ajax。如果状态代码是200和请求是ajax我想返回自定义html.类似的东西:

protected function returnResponse($statusCode, $html, $redirectUrl){
    if($statusCode == 200  &&  isAjax()){
        return parent::returnResponse($customStatusCode, $customHtml, $customRedirectUrl);
    }
    return parent::returnResponse($statusCode, $html, $redirectUrl);
}

编辑:我有这个:

class SomeMiddleware
{
    public function handle($request, Closure $next)
    {
        // do before 

        $request = $next($request);

        //do after

        return $request;
    }
}

但是如何检测当前响应是否重定向?

共有2个答案

韩鸿波
2023-03-14

我的最终解决方案

<?php

namespace App\Http\Middleware;

use Closure;
use Response;
use Request;

class AjaxForm
{

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

        if(Request::ajax() && $response->status() == 301) {
            return (Response::make($response->getTargetUrl(), '200'));
        }

        return $response;
    }

}
尹冠宇
2023-03-14

如果您想检查最终响应并可能返回替代响应,让我们编写一个简单的中间件。

听起来您希望在构建默认响应之后,在最后进行检查(这样您就可以检查它)。因此,我们将这样开始:

// First get the default response
$response = $next($request);

我们的$response变量现在将保存Laravel即将响应的响应。

如果要查看响应是否为重定向,可以轻松检查RedirectResponse实例:

$isRedirect = $response instanceof \Illuminate\Http\RedirectResponse;

您可以简单地测试原始请求是否为ajax:

$isAjax = $request->ajax();

如果您现在想返回一个不同的响应,而不是您收到的响应,我会使用简单的响应()助手方法:

return response($content, $status);

综合起来,我相信这大概就是你要找的:

use Illuminate\Http\RedirectResponse;

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

        if($request->ajax() && $response instanceof RedirectResponse) {
            return response("This is a <strong>different and custom</bold> response");
        }

        return $response;
    }
}
 类似资料:
  • 我经常使用助手,我只是向用户返回带有消息的数据。现在我必须包括超文本传输协议状态代码,但我不想更改每个响应(这很可能是坏的)。 因此,我试图通过创建自己的

  • 本文向大家介绍跟我学Laravel之配置Laravel,包括了跟我学Laravel之配置Laravel的使用技巧和注意事项,需要的朋友参考一下 当你需要在运行时访问配置项时,可以使用Config类: 获取一个配置项的值** 如果配置项不存在,你还可以指定返回的默认值: 为配置项赋值 注意"点"式语法可以用来访问不同文件里的配置项的值。你还可以在运行时为配置项赋值。: 在程序运行时设置的配置值只在本

  • 本文向大家介绍跟我学Laravel之安装Laravel,包括了跟我学Laravel之安装Laravel的使用技巧和注意事项,需要的朋友参考一下 安装Composer Laravel框架使用Composer(PHP包管理工具,参考 Composer 中文文档)来管理代码依赖性。 首先,你需要下载Composer的PHAR打包文件( composer.phar ),下载完成后把它放在项目目录下或者放到

  • 我是新来的Laravel使用本地开发环境与家园尝试运行简单的测试 路由/网络。php: 运行phpunit返回404错误 vagrant@homestead:~/code/laravel$phpunit phpunit 6.4。3由塞巴斯蒂安·伯格曼和撰稿人撰写。 .F.3/3(100%) 时间:1.07秒,内存:10.00MB 有1次失败: 1) Tests\Feature\UserTest::

  • 我正在将我的Laravel5.3网站升级到5.5,无法让Dusk在我的本地主机上正常工作。我有其他单元测试可以在本地主机上正常工作,但是由于某些原因,Dusk对任何本地页面返回。本地页面似乎工作很好,在我的桌面上浏览它。 我的DuskTestCase null

  • 我有一个严重的问题与Livewire从api响应传递数据到组件刀片文件。起初它加载良好,当我点击的时候。下拉列表会在下面抛出一个错误。 Livewire在尝试为[sign up]组件添加水合物时遇到损坏的数据。确保Livewire组件的[名称、id、数据]在请求之间未被篡改。 我有一个我正在加载的下拉列表,一开始它加载得很好,但当我从下拉列表中选择某个内容时,它抛出了那个错误。 下面是我的组件代码