在Laravel 5.5中我们可以通过资源(https://laracasts.com/series/whats-new-in-laravel-5-5/episodes/20)设置API,但是我们如何发送STATUS CODE?
另外,我应该如何动态设置状态,用()
定义//namespace App\Http\Resources;
//use Illuminate\Http\Resources\Json\Resource;
//class User extends Resource
public function with($request)
{
return [
'status' => 'success',
];
}
答案 0 :(得分:8)
您可以使用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);
});
答案 1 :(得分:1)
试试这个:
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\Resource;
class User extends Resource{
public function toArray($request)
{
return[
'name' => $this->username,
'email'=> $this->email
];
}
public function with($request){
return [
'status'=>'success'
];
}
}
在控制器:
$resource = new UserResource($user);
return $resource->response()->setStatusCode(200);
答案 2 :(得分:1)
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'
];
}
}
只需在withResponse方法中设置状态代码
即可答案 3 :(得分:1)
您可以在资源中轻松设置响应状态代码,如以下代码。
CreateUserResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
}
/**
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\JsonResponse|object
*/
public function toResponse($request)
{
return parent::toResponse($request)->setStatusCode(201);
}
}
如果您正在处理数据集合,请使用 Collection 类型而不是资源,如下面的代码。
class CreateUserCollection extends ResourceCollection
{
/**
* Transform the resource collection into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
}
/**
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\JsonResponse|object
*/
public function toResponse($request)
{
return parent::toResponse($request)->setStatusCode(201);
}
}
然后在您的控制器中使用它。
答案 4 :(得分:0)
默认情况下,HTTP响应包含状态代码..因此,您不必在发送/接收的数据中获取它,而是在HTTP响应标头中。


例如,如果您使用axios发送AJAX请求,则只需要执行类似的操作。


 axios.get('/ path / to /get/your/data/').
然后(函数(响应){
 // response.status将代表您的状态代码
});



 因此,当您在控制器中使用 abort(404);
时,状态代码将为404.当您遇到内部错误(代码500)时,您将获得500作为响应代码。
答案 5 :(得分:0)
我更喜欢重写toResponse()方法并在其上添加-> setStatusCode(401);
public function toResponse($request)
{
return (new ResourceResponse($this))->toResponse($request)->setStatusCode(401);
}
如果您想获得动态状态代码,则可以覆盖__constructor并将属性添加到类中
public $statusCode;
public function __construct($resource, $statusCode = 401)
{
parent::__construct($resource);
$this->statusCode = $statusCode;
}
public function toResponse($request)
{
return (new ResourceResponse($this))->toResponse($request)->setStatusCode($this->statusCode);
}