json - 控制器响应奇怪的行为
问题描述
我不明白我的 Laravel 控制器中这种 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,私有 test() 正确到达(一个简单的 Log::debug() 确认)但不会触发 json 响应
请问有人知道为什么吗?只是为了理解...
仅供参考:我也尝试过Response::json([...], 400);
相同的行为......
解决方案
在您的第二个示例中,您在私有函数中返回响应,但您没有将其存储在任何地方以显示它。
在您的第一个示例中,您直接访问您的公共函数,以便处理和显示您的响应,但在您的第二个示例中并非如此。
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
你可以只返回一个布尔值,但如果为真,你的函数应该返回一些东西。