【问题标题】:How to display message success or failed use respond on view ? (Laravel 5.3)如何在视图上显示消息成功或失败使用响应? (Laravel 5.3)
【发布时间】:2017-07-07 02:32:24
【问题描述】:

我在控制器上的 destory 方法是这样的:

public function destroy($id)
{
    try{
        if($this->product_service->destroy($id)){
            return $this->respond(['status' => 'success']);
        }else{
            return $this->respond(['status' => 'failed']);
        }
    }catch (\Exception $e){
        return $this->respondWithError();
    }
}

我的看法是这样的:

@if (session('status')=='success')
    <div class="alert alert-success">
        <ul>
            <li>Delete Success</li>
        </ul>
    </div>
@elseif (session('status')=='failed')
    <div class="alert alert-warning">
        <ul>
            <li>Delete Failed</li>
        </ul>
    </div>
@endif

destroy方法执行后,不显示状态成功或失败

为什么它不起作用?

更新

我的控制器扩展 ApiController

并且在 ApiController 中存在这样的方法:

public function respond($data, $headers=[])
{
    return response()->json($data,$this->getStatusCode(), $headers);
}

【问题讨论】:

  • 您实际上并没有在任何地方向会话添加任何内容。您还返回 json 响应,因此也很难判断您的视图何时被准确加载。

标签: php laravel session laravel-5.3


【解决方案1】:

我建议你使用这个包:

https://github.com/laracasts/flash

请阅读那里的文档,它解释得很好。

如果您想使用自定义代码执行此操作:

控制器

public function destroy($id)
{
   if($this->product_service->destroy($id)){
     return view('viewname', ['class' => 'success', 'message' => 'Delete Success']);
   } else{
     return view('viewname', ['class' => 'success', 'message' => 'Delete Failed']);
   }
}

查看:

 <div class="alert alert-{{ $class }}">
     <ul>
       <li>{{ $message }}</li>
     </ul>
  </div>

【讨论】:

  • 我想使用$this-&gt;respond。不是其他人。不能吗?
  • 不,它不能,.. 你在哪里读到过这种方法?能给个网址吗?
  • 我的控制器扩展了 ApiController。在我的 ApiController 中存在这样的方法:public function respond($data, $headers=[]) { return response()-&gt;json($data,$this-&gt;getStatusCode(), $headers); }
【解决方案2】:

您可以简单地调用:

return \Redirect::back()->with('status', 'your status here...');

应该就是这样。

如果您想返回json object,也可以使用Response:json,方便使用AJAX,如下所示:

return \Response::json(['status' => 'your status here...'], 200);

然后您可以使用ajax 在视图上捕获status,如下所示:

errorsHtml = '<div class="alert alert-danger"><ul>';
$.each(responseText, function(k, v){
 errorsHtml += '<li>' + v + '</li>';
});
errorsHtml += '</ul></div>';
$("#feedback").append(errorsHtml);

请注意,您可以在\Response::json 方法中传递任何其他数据:

return \Response::json(['status' => 'your status here...', 'data' => $data], 200);

【讨论】:

    【解决方案3】:

    使用:

    $request->session()->flash('status', 'Task was successful!');
    

    https://laravel.com/docs/5.4/session#flash-data

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-27
      • 1970-01-01
      • 2016-10-16
      • 2020-02-21
      • 1970-01-01
      • 2017-01-20
      相关资源
      最近更新 更多