我在Laravel Controller中不了解这种json响应的情况
工作正常,如预期:
public function getHelloV1(Request $req) {
if ($isOK == false) {
return response()->json([
'success' => false,
'msg' => 'hum...',
], 400);
}
return View::make('app.hello'); }
完全不符合预期:
private test() {
if ($isOK == false) {
return response()->json([
'success' => false,
'msg' => 'hum...',
], 400);
}}
public function getHelloV2(Request $req) {
self::test();
return View::make('app.hello');}
对于getHelloV2,可以正确访问private test()(一个简单的Log :: debug()确认它),但不会触发json响应
有人知道为什么要吗?只是为了了解...
仅供参考:我也尝试过Response::json([...], 400);
,但行为相同...
答案 0 :(得分:0)
在第二个示例中,您将响应返回到私有函数中,但没有将其存储在任何地方以显示它。
在第一个示例中,您直接访问公共功能,因此您的响应得到处理和显示,但在第二个示例中情况并非如此。
public function getHelloV2(Request $req) {
self::test();
return View::make('app.hello');
}
self:test();
将到达您的私有功能测试,但您需要在此处发送变量。 $isOk
变量未在私有函数中的任何位置定义,因此您需要在getHelloV2
内定义变量并将其发送以测试以下内容:
public function getHelloV2(Request $req) {
$isOk = false;
self::test($isOk);
return View::make('app.hello');
}
您的私有函数应该类似于:
private test($isOK) {
if ($isOK == false) {
return response()->json([
'success' => false,
'msg' => 'hum...',
], 400);
}}
如果此值来自请求,则只需传递请求字段即可对其进行检查。
现在在您的公共函数getHelloV2
中,您具有测试的输出,您只需将其存储并显示在以下位置即可:
public function getHelloV2(Request $req) {
$myOutput = self::test();
echo $myOutput; //here is your json response
return View::make('app.hello');
}
最佳做法是在if检查之外还返回一些内容,以便您的函数始终输出某些内容。您可以只返回一个布尔值,但是如果$isOk
为true,则您的函数应该返回某些内容。