Laravel 5 — вызов $ request-> gt; path () в промежуточном программном обеспечении, заставляющий Laravel игнорировать изменения, внесенные в URI запроса?

Используя 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 запроса. Что мне здесь не хватает?

Sidenote: Код возник из первого ответа на этот пост:
https://laracasts.com/discuss/channels/general-discussion/l5-whats-the-proper-way-to-create-new-request-in-middleware?page=1

0

Решение

Я не думаю, что строка № 8 манипулирует вашим выводом.
Здесь path() метод из код ларавеллы:

public function path()
{
$pattern = trim($this->getPathInfo(), '/');
return $pattern == '' ? '/' : $pattern;
}

Как вы можете видеть, это просто извлечение pathInfo без редактирования самого запроса.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]