【问题标题】:How do you return a view inside of a json response in Laravel?如何在 Laravel 的 json 响应中返回视图?
【发布时间】:2015-05-06 07:25:19
【问题描述】:

我正在使用 Laravel 实现一个简单的注册表单。如果失败,它应该返回一个 json 响应:

{"success":"false", "message":"Could not log in newly registered user"}`

这按预期工作。如果注册和登录成功,我想返回:

{"success":"true", "message":$html}

在这种情况下,$html 将使用视图创建。其中的重要部分如下:

if(Auth::attempt(array('email' => Input::get('email'), 'password' => Input::get('password'))))
{
    $html = View::make('welcome_new_user', array('first_name' => Input::get('first_name')));
    return Response::json(array('success' => 'true', 'message' => $html));
}
else
{
    return Response::json(array('success' => 'false', 'message' => 'Could not log in newly created user.'));
}

如果失败,我会得到预期的响应。成功时,我得到了"success":"true",但是一个空的message。我在返回之前立即回显了$html,它包含预期的html。为什么返回的消息是空的?

【问题讨论】:

    标签: php json laravel laravel-4


    【解决方案1】:

    $html 是从View::make() 返回的内容。要在响应中返回它,它需要用引号引起来。工作解决方案如下:

    if(Auth::attempt(array('email' => Input::get('email'), 'password' => Input::get('password'))))
    {
        $html = View::make('welcome_new_user', array('first_name' => Input::get('first_name')));
        return Response::json(array('success' => 'true', 'message' => "$html"));
    }
    else
    {
        return Response::json(array('success' => 'false', 'message' => 'Could not log in newly created user.'));
    }
    

    注意'message' => "$html"

    【讨论】:

      【解决方案2】:

      View::make() 实际上返回一个Illuminate\View\View 对象。用双引号将变量括起来的原因是因为这样做会隐式调用$html->__toString(),它会调用render() 方法并返回由View 对象表示的html。

      View 获取html 的显式方法是直接调用render() 方法($html->render())。

      【讨论】:

        猜你喜欢
        • 2020-10-11
        • 1970-01-01
        • 2017-03-25
        • 2020-02-20
        • 2016-12-07
        • 1970-01-01
        • 2019-12-19
        • 2021-01-14
        • 2021-12-26
        相关资源
        最近更新 更多