Laravel 5 Laravel 5.6-是否将其他参数传递给API资源?
Laravel可以是单个资源或集合。在某些情况下,需要从控制器向资源/集合传递其他参数。下面是一个简单的示例,演示了如何将Laravel 5 Laravel 5.6-是否将其他参数传递给API资源?,laravel-5,laravel-5.6,Laravel 5,Laravel 5.6,Laravel可以是单个资源或集合。在某些情况下,需要从控制器向资源/集合传递其他参数。下面是一个简单的示例,演示了如何将User用作单个/集合资源,并将自定义$apple参数传递给资源进行输出的问题。这个问题可以在下面的最终输出(集合)中看到,对于水果值,我们为第一个用户得到了一个不正确的香蕉,而不是正确的苹果值(所有其他用户都得到)。它适用于单个输出,而不是集合。见下文: 具有用户资源的控制器(单个) $user=user::first(); 返回新的用户资源($user,$apple=tr
User
用作单个/集合资源,并将自定义$apple
参数传递给资源进行输出的问题。这个问题可以在下面的最终输出(集合)
中看到,对于水果
值,我们为第一个用户得到了一个不正确的香蕉
,而不是正确的苹果
值(所有其他用户都得到)。它适用于单个输出,而不是集合。见下文:
具有用户资源的控制器(单个)
$user=user::first();
返回新的用户资源($user,$apple=true);//$苹果参数通过了
具有用户资源的控制器(集合)
$users=User::limit(3)->get();
return UserResource::collection($users,$apple=true);//$苹果参数通过了
用户资源
public function toArray($request)
{
return [
'id' => $this->id,
'picture' => $this->picture,
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'active' => $this->active,
'access_token' => isset($this->access_token) ? $this->access_token : '', // Additional data
];
}
您可以将额外参数作为调用的一部分传递给API端点。然后可以使用UserResource中的$request对象(例如)访问参数
例如,如果使用以下方式从客户端(如web浏览器、axios等)调用端点:
http://localhost:3000/api/users?apple=true
这将使控制器中的参数apple的值为true。无需您执行任何其他操作,也可以在UserResource的toArray($request)中访问它。您可以通过以下类似方式访问它:
public function toArray($request) {
$isApple = $request->apple;
return [
'id' => (int) $this->id,
'name' => $this->name,
'fruit' => $isApple ? 'apple' : 'banana',
];
}
以下方法对我有效:
用户资源
public function toArray($request)
{
return [
'id' => $this->id,
'picture' => $this->picture,
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'active' => $this->active,
'access_token' => isset($this->access_token) ? $this->access_token : '', // Additional data
];
}
class用户资源扩展了资源{
受保护$foo;
公共功能foo($value){
$this->foo=$value;
退还$this;
}
公共功能待命($request){
返回[
'id'=>this->id,
“名称”=>$this->name,
'foo'=>this->foo,
];
}
公共静态函数集合($resource){
返回新的UserResourceCollection($resource);
}
}
UserCollection
类UserResourceCollection扩展了ResourceCollection{
受保护$foo;
公共功能foo($value){
$this->foo=$value;
退还$this;
}
公共功能待命($request){
返回$this->collection->map(函数(UserResource$resource)use($request){
返回$resource->foo($this->foo)->toArray($request);
})->全部();
//或者使用HigherOrderCollectionProxy
//返回$this->collection->each->foo($this->foo)->map->toArray($request)->all()
//还是简单
//$this->collection->each->foo($this->foo);
//返回父::toArray($request);
}
}
传递附加参数的不同方式
$user = User::find($user->id);
$user->access_token = $tokenResult->accessToken; // Add additional data
return new ProfileResource($user);
(新用户资源($user))->foo('bar');
(新的UserResourceCollection($user))->foo('bar');
UserResource::make($user)->foo('bar');
UserResourceCollection::make($users)->foo('bar');
UserResource::collection($users)->foo('bar');
为了使用Laravel 5.7,我对
用户资源
public function toArray($request)
{
return [
'id' => $this->id,
'picture' => $this->picture,
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'active' => $this->active,
'access_token' => isset($this->access_token) ? $this->access_token : '', // Additional data
];
}
class用户资源扩展了资源{
受保护$foo;
公共功能foo($value){
$this->foo=$value;
退还$this;
}
公共功能待命($request){
返回[
'id'=>this->id,
“名称”=>$this->name,
'foo'=>this->foo,
];
}
公共静态函数集合($resource){
返回新的UserResourceCollection($resource,get_called_class());
}
}
UserCollection
类UserResourceCollection扩展了AnonymousResourceCollection{
受保护$foo;
公共功能foo($value){
$this->foo=$value;
退还$this;
}
公共功能待命($request){
返回$this->collection->map(函数(UserResource$resource)use($request){
返回$resource->foo($this->foo)->toArray($request);
})->全部();
}
}
在Laravel 5.8中,这个简单的技巧对我很有效:) 控制器
$user = User::find($user->id);
$user->access_token = $tokenResult->accessToken; // Add additional data
return new ProfileResource($user);
资源
public function toArray($request)
{
return [
'id' => $this->id,
'picture' => $this->picture,
'first_name' => $this->first_name,
'last_name' => $this->last_name,
'active' => $this->active,
'access_token' => isset($this->access_token) ? $this->access_token : '', // Additional data
];
}
我解决了我的问题,只需检索
public function toArray($request){
$param = $request->get('param');
...
}
不要通过资源传递参数。您可以使用laravel 8
对于存储功能附加
return (UserResource::make(User::find($user->id)))
->additional([
'message'=>[
['user by name: '.$user->name.' created successfull.']
]
])->response()->setStatusCode(201);
收集功能代码在哪里?在Laravel代码库中,我认为它需要一个已经熟悉Laravel资源的人(如上链接),他已经面对这个问题并解决了它。这不起作用我尝试了这个
UserResource::collection($users)->foo('bar')代码>但出现错误方法照亮\Support\Collection::foo不存在。
@MunnaKhanfoo
不是静态方法。您正在使用foo
作为静态方法。您需要首先实例化UserResource
集合,如答案所示。集合如何?我有几个数据,这些数据是基于all()
获取的,然后返回像'DataResource::collection($data');没有了解你的问题,你面临什么问题?