在 Laravel 5 中为使用 json 方法链接的响应助手添加宏时出错
Error on adding macro for response helper chained with json method in Laravel 5
我正在开发一个仅使用 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.
我该如何解决这个问题?谢谢。
当我看Illuminate\Support\Facades\Response class, the Response Facade proxies the Illuminate\Routing\ResponseFactoryclass的时候。虽然 ResponseFactory 也是可宏化的,但它用于不同的目的。
所以请添加一个宏到正确的class,在这种情况下我认为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
);
});
}
我正在开发一个仅使用 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.
我该如何解决这个问题?谢谢。
当我看Illuminate\Support\Facades\Response class, the Response Facade proxies the Illuminate\Routing\ResponseFactoryclass的时候。虽然 ResponseFactory 也是可宏化的,但它用于不同的目的。
所以请添加一个宏到正确的class,在这种情况下我认为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
);
});
}