【问题标题】:Slim Framework middleware array json manipulationSlim 框架中间件数组 json 操作
【发布时间】:2014-04-05 05:49:59
【问题描述】:

我正在尝试在 Slim 框架中实现一个简单的中间件,它在响应正文中添加一个数组元素。如果没有中间件,我将得到正确的结果为{"mytest":"running"}。我真正想要的是让中间件合并另一个元素并使其成为{"mytest":"running","MODE":"development"}。相反,我得到了这个结果{"0":"{\"mytest\"","1":"\"running\"}","MODE":"development"}

我肯定错过了一些非常简单的东西。请在下面查看我正在使用的代码。我想我无法将正文转换为数组。

这就是我正在做的:

index.php

require 'Vendor/Slim/Slim.php';
\Slim\Slim::registerAutoloader();

$app = new \Slim\Slim();

//Middleware
$app->add(new \Slim\Middleware\TestMiddleware());

 // Middleware Test
    $app->get( 
        '/mid',
        function () use ($app) {
          $response = $app->response();
          $response->body(json_encode(array(
                'mytest'=>'running'
                )));

        }
    );

TestMiddleware.php

namespace Slim\Middleware;

//Appends mode to the response bpoy
class TestMiddleware extends \Slim\Middleware
{
    public function call()
    {
        $app=$this->app;

        $this->next->call();

        $res=$app->response;
        $body=$res->getBody();
        $res->setBody(
            json_encode(
                     array_merge(
                       explode(":",$body),array(
                'MODE'=>'development'
            )))
        );

    }

}

【问题讨论】:

    标签: php arrays json slim


    【解决方案1】:

    而不是 explode 在合并数组之前尝试解码您的 json:

    json_encode(
        array_merge(
            json_decode($body,true),
            array('MODE'=>'development')
        )
    )
    

    DEMO

    【讨论】:

    • 哇,这解决了我的问题。它是如此简单,但我无法弄清楚。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2015-02-14
    • 2016-01-15
    • 2017-02-28
    • 1970-01-01
    • 2013-06-27
    • 2015-03-17
    • 2018-03-22
    • 1970-01-01
    相关资源
    最近更新 更多