laravel eloquent resources api发送状态码

use*_*776 1 laravel laravel-5 laravel-5.5

在Laravel 5.5中我们可以通过资源设置API(https://laracasts.com/series/whats-new-in-laravel-5-5/episodes/20),但我们如何发送STATUS CODE?

另外我应该如何动态设置状态,用()定义

//namespace App\Http\Resources;

//use Illuminate\Http\Resources\Json\Resource;

//class User extends Resource 

public function with($request)
{
    return [
        'status' => 'success',
    ];
}
Run Code Online (Sandbox Code Playgroud)

小智 9

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\Resource;

class UserFail extends Resource{


/**
 * Customize the outgoing response for the resource.
 *
 * @param  \Illuminate\Http\Request
 * @param  \Illuminate\Http\Response
 * @return void
 */
public function withResponse($request, $response)
{
    /**
     * Not all prerequisites were met.
     */
    $response->setStatusCode(428, 'Precondition Required');
}

  public function with($request){
      return [
        'status'=>'failed'
      ];
  }

}
Run Code Online (Sandbox Code Playgroud)

只需在 withResponse 方法中设置状态代码


Sam*_*ins 9

您可以使用该方法setStatusCode()response():

use App\User;
use App\Http\Resources\User as UserResource;

Route::get('/user', function () {
    return (new UserResource(User::find(1)))
               ->response()
               ->setStatusCode(200);
});
Run Code Online (Sandbox Code Playgroud)

  • 这是迄今为止最好的方法。我不明白为什么有人会在资源类本身中设置响应代码。它将是动态的,并且确定返回状态的逻辑不属于那里。它属于创建/编辑/删除/任何逻辑所在的控制器。谢谢。 (2认同)

小智 -3

默认情况下,HTTP 响应包含状态代码。因此,您不必在发送/接收的数据中获取它,而是在 HTTP 响应标头中获取它。

例如,如果您使用 axios 发送 AJAX 请求,您只需执行以下操作:

axios.get('/path/to/get/your/data/').
  then(function(response) {
    // response.status will represent your status code
});
Run Code Online (Sandbox Code Playgroud)

因此,当您在控制器中使用时abort(404);,状态代码将为 404。当您出现内部错误(代码 500)时,您将得到 500 作为响应代码。