Задать вопрос
@3dben

Почему переменная не перезаписывается?

Прохожу на youtube урок автора по написанию роутера как в laravel и у меня затык. Всё вроде 1:1 как у автора, но REQUEST_URI в переменную не записывается

private string $requestUri = '/';
    private RouteConfiguration $routerConfiguration;

    public function __construct(RouteConfiguration $routerConfiguration)
    {
        $this->routerConfiguration = $routerConfiguration;
    }

    public function process()
    {
        $this->saveRequestUri();
    }

    private function saveRequestUri()
    {
        if ($this->requestUri !== '/') {
            $this->requestUri = $this->clean($_SERVER['REQUEST_URI']);
            $this->routerConfiguration->route = $this->clean($this->routerConfiguration);
        }

        echo '<pre>';
        var_dump($this->requestUri);
        var_dump($this->routerConfiguration->route);
        echo '</pre>';
    }

    private function clean($str)
    {
        return preg_replace('/(^\/)|(\/$)/', '', $str);
    }


Получается, если в строке браузера не слэш $this->requestUri !== '/' тогда получаем то что в строке браузера и с помощью регулярного выражения заменяем слеш в конце и начале строки на пустоту.

То есть функция с регулярным выражением рабочая
public function clean($str)
    {
        return preg_replace('/(^\/)|(\/$)/', '', $str);
    }


Так же вот это возвращает строку уже без слешей в начале и конце строки браузера:
$this->clean($_SERVER['REQUEST_URI'])

Но прим этом $this->requestUri пустая, показывает только слэш по умолчанию, а не то что я указываю в строке браузера
$this->requestUri = $this->clean($_SERVER['REQUEST_URI']);


Я получаю это
string(1) "/"
string(6) "/posts"
string(1) "/"
string(13) "/posts/{post}"


А должен получить это
string(7) "post/10"
string(6) "/posts"
string(7) "post/10"
string(13) "/posts/{post}"


При том что если сделать так, посмотреть что у меня внутри, код что надо, но не записывается в $this->requestUri Что делать не понимаю =(
var_dump($this->clean($_SERVER['REQUEST_URI']));

Подскажите, как это поправить.
  • Вопрос задан
  • 96 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
private string $requestUri = '/';
...
if ($this->requestUri !== '/') {

То есть, при инициализации экземпляра вы записываете в requestUri слэш, а перезаписываете значение только если там не слэш. Соответственно, условие всегда ложно и тело условия не выполняется.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы