我需要读取我的 Laravel 应用程序在 JS 中设置的 cookie。有没有办法在 Laravel 中做到这一点(而不是直接通过 PHP 设置)而不覆盖类?
参见
EncryptCookies
中间件 - 这允许您设置例外情况;即不加密的cookie。
namespace App\Http\Middleware;
use Illuminate\Cookie\Middleware\EncryptCookies as BaseEncrypter;
class EncryptCookies extends BaseEncrypter
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
'my_cookie'
];
}
接受的答案完全没问题。
但是我正在写@Bower 评论中指出的同一件事的其他方式。由于这是一个冗长的方法,我没有发表评论,而是写了一个完整的答案。
要使用
disableFor
方法执行相同的操作,您可以遵循以下任何方法。
EncryptCookies
。并在实例化后调用 disableFor
。
// use App\Http\Middleware\EncryptCookies;
// use Illuminate\Contracts\Encryption\Encrypter;
$this->app->bind(EncryptCookies::class, function ($app) {
return tap(new EncryptCookies($app->make(Encrypter::class)), function ($middleware) {
$middleware->disableFor('laravel_session');
});
});
afterResolving
事件。$this->app->afterResolving(EncryptCookies::class, function ($middleware) {
$middleware->disableFor('laravel_session');
});
而且,这两种方法都是违反直觉的并且根本没有意义。恕我直言,它们都增加了隐藏调试时通常不查看的代码的复杂性。
在较新的 Laravel 版本中,这甚至更简单。
class AppServiceProvider extends ServiceProvider
{
public function boot(): void
{
EncryptCookies::except('my_cookie');
}
}