调用未定义的方法 Symfony\Component\HttpFoundation\Response::withC



Laravel: 6.18.1 菲律宾比索: 7.4

laravel中的中间件正在创建此错误

{
"message": "Call to undefined method Symfony\Component\HttpFoundation\Response::withCookie()",
"exception": "Symfony\Component\Debug\Exception\FatalThrowableError",

给我错误的代码

if (!$request->hasCookie('ppl') || ($request->hasCookie('ppl') && $ppl_cookie->ppl_id != $ppl->ppl_id)) {
if (Auth::check()) {
Event::dispatch('ppl.updated', [Auth::user(), $ppl]);
}
return $next($request)->withCookie(cookie()->forever('ppl', $ppl));
}

我不明白问题。 饼干不存储在浏览器中

编辑

中间件类

<?php 
namespace AppHttpMiddleware;
use Closure;
use AppSystemModelsPeople;
use App;
use Event;
use Auth;
use IlluminateSupportFacadesURL;
use Session;
class VerifyPeople
{
protected $app;
public function __construct()
{
$this->app = app();
}
/**
* Handle an incoming request.
*
* @param  IlluminateHttpRequest $request
* @param  Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$People_cookie = json_decode($request->cookie('People'));
if (!empty($request->route()) && in_array($request->route()->uri(), $this->excepts)) {
return $next($request);
}
if ($request->getHost()) {
$domain_url = cleanUrl($request->getHost());
$People = People::where('People_url', '=', $domain_url)->remember(LONG_TERM_CACHE_TIMEOUT)->cacheTags(TAG_LONGTERM_DATA)->first();
} elseif ($request->hasCookie('People')) {
$People = $People_cookie;
}
if (empty($People)) {
$People = People::where("People_id", People::DEFAULT_People)->remember(LONG_TERM_CACHE_TIMEOUT)->cacheTags(TAG_LONGTERM_DATA)->first();
}
$this->app->singleton('People', function () use ($People) {
return $People;
});
if (!$request->hasCookie('People') || ($request->hasCookie('People') && $People_cookie->People_id != $People->People_id)) {
if (Auth::check()) {
Event::dispatch('People.updated', [Auth::user(), $People]);
}
return $next($request)->withCookie(cookie()->forever('People', $People));
}
return $next($request);
}
}

在中间件中,当你做dd($next($request));时,它应该打印一个IlluminateHttpResponse实例,该实例可以访问ResponseTraitwithCookie特征中的方法。

在您的情况下,SymfonyComponentHttpFoundationResponse的实例给出错误,该错误由IlluminateHttpResponse扩展但不使用ResponseTrait。这就是withCookie方法没有找到的原因。

可能有几个原因,例如,在执行此中间件之前 - 另一个中间件正在使用Symfony响应修改默认响应。

这是withCookie方法。

public function withCookie($cookie)
{
if (is_string($cookie) && function_exists('cookie')) {
$cookie = call_user_func_array('cookie', func_get_args());
}
$this->headers->setCookie($cookie);
return $this;
}

它所做的是调用标头的 setCookie 方法。你可以做的是;

取代

return $next($request)->withCookie(cookie()->forever('People', $People));

$response = $next($request);
$response->headers->setCookie(cookie()->forever('People', $People));
return $response;

在查找时;我发现了与您类似的案例

相关内容

最新更新