Php 曲奇在拉威尔不起作用?
当一个新用户访问我的网站时,我想将他们重定向到/welcome,但只有一次,我想这样做,我可以使用cookies,在他们访问了welcome页面后设置一个cookie,然后在将他们发送到/welcome之前检查cookie是否存在 这里有一个基本控制器Php 曲奇在拉威尔不起作用?,php,laravel,cookies,Php,Laravel,Cookies,当一个新用户访问我的网站时,我想将他们重定向到/welcome,但只有一次,我想这样做,我可以使用cookies,在他们访问了welcome页面后设置一个cookie,然后在将他们发送到/welcome之前检查cookie是否存在 这里有一个基本控制器 class BaseController extends Controller { public function __construct(Request $request) { $this->checkW
class BaseController extends Controller
{
public function __construct(Request $request)
{
$this->checkWelcome($request);
}
private function checkWelcome(Request $request) {
$currentRoute = Route::currentRouteName();
if ($currentRoute != 'frontend.guest.welcome' && Cookie::get('visited_welcome') != '1') {
header('location: ' . route('frontend.guest.welcome'));
exit();
}
}
}
发送到frontend.guest.welcome
时,它有一条到WelcomeController的路线
Route::get('/welcome', ['uses' => 'WelcomeController@getView', 'as' => 'frontend.guest.welcome']);
class WelcomeController extends BaseController
{
public function getView()
{
Cookie::forever('visited_welcome', '1');
return view('frontend.guest.welcome');
}
}
这是Welcome控制器
Route::get('/welcome', ['uses' => 'WelcomeController@getView', 'as' => 'frontend.guest.welcome']);
class WelcomeController extends BaseController
{
public function getView()
{
Cookie::forever('visited_welcome', '1');
return view('frontend.guest.welcome');
}
}
问题是,它不断地发送给/welcome,不是一次而是始终发送。如果您没有返回带有响应的cookie,请将其附加到响应,如下所示:
public function checkWelcome(Request $request) {
{
if (!$request->cookie('visited_welcome')) {
return redirect('frontend.guest.welcome')->withCookie(Cookie::forever('visited_welcome', '1'));
}
// otherwise proceed as normal
}
或者,您可以在Cookie facade上使用队列方法:
Cookie::queue(Cookie::forever('visited_welcome', '1'));
更好的方法可能是使用中间件,这样您就不需要在控制器代码中实现任何检查。例如:
// CheckIfFirstTimeVisit.php
public function handle(Request $request, Closure $next)
{
if ($request->cookies->has('visited_welcome')) {
return $request($next);
}
return response()->view('frontend.guest.welcome')
->withCookie(Cookie::forever('visited_welcome', '1'));
}
尝试在app\Http\Middleware\EncryptCookies.php中删除cookie
class EncryptCookies extends Middleware
{
/**
* The names of the cookies that should not be encrypted.
*
* @var array
*/
protected $except = [
'visited_welcome'
];
}
伊卢。我和这个吵了几个小时。