我正在使用仅使用API路由的Laravel 5应用程序。我创建了一个宏来扩展响应助手的添加cookie方法。但是我遇到了我的宏不存在的错误。
我们正在使用它来返回响应:
return response()->json($data, $status)
->cookie(
'COOKIE_NAME',
$value,
$expiration,
'/',
app()->environment('production') ? config('app.domain') : null,
app()->environment('production'),
true
);
由于过期后的数据对于所有使用cookie的端点来说始终是相同的,因此我想创建一个宏,该宏将自动将该数据添加到cookie中并减少代码:
return response()->json($data, $status)
->httpCookie('COOKIE_NAME, $value, $expiration);
我创建了一个ResponseServiceProvider
,并使用Response::macro
方法添加了宏。
这是我的宏代码:
public function boot()
{
Response::macro('httpCookie', function ($name, $value, $expiration) {
$isProd = app()->environment('production');
return response()->cookie(
$name,
$value,
$expiration,
'/',
$isProd ? config('app.domain') : null,
$isProd,
true
);
});
}
然后尝试测试端点,我遇到了一个错误:
BadMethodCallException
Method Illuminate\Http\JsonResponse::httpCookie does not exist.
如何解决此问题?谢谢。
答案 0 :(得分:1)
当我查看Illuminate\Support\Facades\Response类时,响应外观代理了Illuminate\Routing\ResponseFactory类。尽管ResponseFactory也可以宏化,但它用于其他目的。
因此,请将宏添加到正确的类中,在这种情况下,我认为是Illuminate\Http\Response:
use Illuminate\Http\Response;
public function boot()
{
Response::macro('httpCookie', function ($name, $value, $expiration) {
$isProd = app()->environment('production');
return $this->cookie(
$name,
$value,
$expiration,
'/',
$isProd ? config('app.domain') : null,
$isProd,
true
);
});
}