Используя Laravel 5.2 и промежуточное ПО, мне нужно удалить определенную часть из URI запроса, прежде чем он будет отправлен. В частности, в URL вида "http://somewebsite.com/en/company/about. ", я хочу удалить из него часть "/en/".
Вот как я это делаю:
...
class LanguageMiddleware
{
public function handle($request, Closure $next)
{
//echo("ORIGINAL PATH: " . $request->path()); //notice this line
//duplicate the request
$dupRequest = $request->duplicate();
//get the language part
$lang = $dupRequest->segment(1);
//set the lang in the session
$_SESSION['lang'] = $lang;
//now remove the language part from the URI
$newpath = str_replace($lang, '', $dupRequest->path());
//set the new URI
$request->server->set('REQUEST_URI', $newpath);
echo("FINAL PATH: " . $request->path());
echo("LANGUAGE: " . $lang);
$response = $next($request);
return $response;
}//end function
}//end class
Этот код работает нормально - когда исходный URI «en/company/about», результирующий URI действительно «company/about». Моя проблема заключается в следующем: обратите внимание, что строка, в которой я повторяю ИСХОДНЫЙ ПУТЬ, закомментирована (строка 8). Это делается специально. Если я раскомментирую эту строку, код не будет работать; когда исходный URI — «en/company/about», результирующий URI по-прежнему «en/company/about».
Из этого я могу сделать только два вывода: либо отправка вывода перед манипулированием запросом каким-то образом является виновником (проверено - это не так), либо вызов метода $request->path() для получения URI имеет какое-то отношение к это. Хотя в производственной среде мне, конечно, никогда не понадобится повторять URI, и хотя это только для целей отладки, мне все равно нужно знать, почему это происходит. Я только хочу получить URI запроса. Что мне здесь не хватает?
Примечание: код взят из первого ответа на этот пост: https://laracasts.com/discuss/channels/general-discussion/l5-whats-the-proper-way-to-create-new-request-in-middleware?page=1