如何在Laravel中返回json响应中的视图?

时间:2015-03-05 02:50:30

标签: php json laravel laravel-4

我正在用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。为什么回复中的消息为空?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

$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"