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