【发布时间】:2018-12-22 23:33:23
【问题描述】:
在我的 laravel 应用程序中,我想在将他/她重定向到实际文件之前验证客户端是否有 cookie。为此,我创建了一个控制器函数来接收我创建的这条新路由:
Route::group(['middleware'=>['web']], function(){
Route::get('/storage/{filename}', 'HomeController@getArquivo');
}
控制器:
class HomeController extends Controller{
public function getArquivo($filename)
{
if(hasCookie()) Redirect::to('/storage/' . $filename);
else Redirect::to('/some/other/address');
}
}
因此,例如,在我的存储中,我有一个名为 8-0.jpeg 的文件,而 getArquivo 函数仅在我传递与它不同的文件名时才会被调用(如 url.com/storage/something)。如果我传递了确切的文件名 url.com/storage/8-0.jpeg),那么它只会返回忽略路线的图像。所以我的问题是,如何强制 GET 请求总是先通过这个控制器?提前致谢。
编辑:我已根据提供的答案进行了更改,但我无法使其正常工作。现在的代码如何:
中间件:
class VerificaCookieArquivo
{
var $nomeBiscoitoSessao = "biscoito";
public function handle($request, Closure $next)
{
if ($this->temBiscoito()) {
return $next($request);
}
return Redirect::to('/some/other/address');
}
private function temBiscoito(){
return isset($_COOKIE[$this->nomeBiscoitoSessao]);
}
}
Kernel.php:
protected $routeMiddleware = [
//other middlewares
'verificaCookieArquivo' => \Ibbr\Http\Middleware\VerificaCookieArquivo::class,
];
在路由 (web.php) 中,我为此 cookie 检查创建了一个单独的路由组,因为我不希望它影响我拥有的其他路由:
Route::group(['middleware'=>['verificaCookieArquivo']], function()
{
Route::get('/storage/{filename}', 'HomeController@getArquivo');
});
在 HomeController.php 中:
public function getArquivo($filename){
$fullpath = "/storage/" . $filename;
return response()->download(storage_path($fullpath), null, [], null);
}
还是不能让它工作,行为还是和以前一样
【问题讨论】:
标签: php laravel http-get laravel-5.6