I have custom Request class:
class ApiRequest extends FormRequest
{
...
public function locale()
{
$lang = $this->header('Accept-Language');
return $lang ? $lang : 'uz';
}
}
and API recourse:
class SomeResource extends JsonResource
{
public function toArray($request)
{
return [
'id' => $this->id,
...
];
}
}
but I can't use ApiRequest's method locale()
in SomeResource. Because toArray()
accepts only \Illuminate\Http\Request
.
Is there any idea that I pass my class into this? Or a better solution from you.
I created a base Resource class, that all my other resource classes extend it with my custom method:
class BaseResource extends JsonResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
return parent::toArray($request);
}
protected function locale($request)
{
$lang = $request->header('Accept-Language');
return $lang ? $lang : 'uz';
}
}
and I use it in child class:
class SomeResource extends BaseResource
{
/**
* Transform the resource into an array.
*
* @param \Illuminate\Http\Request $request
* @return array
*/
public function toArray($request)
{
$lang = $this->locale($request);
return [
'id' => $this->id,
'hash' => $this->hash,
'name' => $this->translation('name', $this->locale($request)),
'created_at' => $this->created_at,
'updated_at' => $this->updated_at,
];
}
}