首页 > 解决方案 > 控制器响应奇怪的行为

问题描述

我不明白我的 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);相同的行为......

标签: jsonajaxlaravelcontrollerresponse

解决方案


在您的第二个示例中,您在私有函数中返回响应,但您没有将其存储在任何地方以显示它。

在您的第一个示例中,您直接访问您的公共函数,以便处理和显示您的响应,但在您的第二个示例中并非如此。

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你可以只返回一个布尔值,但如果为真,你的函数应该返回一些东西。


推荐阅读