в этой лекции мы собираемся заменить заполнитель регулярным выражением.
наш маршрутизатор должен обеспечивать поддержку параметров маршрута.
параметры маршрута записываются в фигурных скобках.
цель состоит в том, чтобы заменить эти заполнители регулярными выражениями.
таким образом, мы сможем извлечь значение из URL-адреса.
чтобы выполнить это действие, мы должны обнаружить заполнители в наших путях.
обнаружение заполнителей также может быть выполнено с помощью регулярного выражения.
давайте снова воспользуемся инструментом regular expression 101.
если вы потеряли ссылку на этот инструмент, найдите ее в разделе "Ресурсы" этой лекции.
давайте добавим наш маршрут в поле "Тестовая строка" в качестве примера.
введите следующее: транзакция transaction.
первое регулярное выражение, которое мы напишем, - это определение заполнителя в пути.
1-й, давайте заменим разделитель на хэш-символы.
в поле регулярного выражения добавьте пару фигурных скобок.
первым шагом является поиск открывающих и закрывающих фигурных скобок.
если бы мы удалили имя параметра маршрута, регулярное выражение смогло бы их найти.
однако, это не совсем то, чего мы хотим.
параметры нашего маршрута будут иметь названия.
имена могут быть любыми по желанию разработчика.
в этом случае наше выражение должно иметь возможность выбирать весь сегмент от начала фигурной скобки до закрывающей фигурной скобки.
внутри этих фигурных скобок добавьте пару квадратных скобок.
мы уже говорили о квадратных скобках раньше.
они используются для выбора диапазона символов.
мы хотим иметь возможность выбирать любой символ между фигурными скобками, за одним исключением.
мы не хотим выбирать персонажей с соответствующим характером.
этот символ указывает на новый сегмент пути.
мы хотим выбирать символы только в текущем сегменте пути.
заключи этот символ в квадратные скобки.
если мы посмотрим на объяснение, то увидим, что инструмент указывает, что выражение выберет этот символ.
его эффект противоположен тому, чего мы хотим.
в начале квадратных скобок добавьте символ каретки.
символ каретки изменяет поведение квадратных скобок.
этот символ указывает регулярному выражению не выбирать символы в этом диапазоне.
взглянув на объяснение, можно заметить, что описание немного изменилось.
в нем говорится, что любые символы в этом диапазоне не совпадают, а именно этого мы и добиваемся.
последний шаг - выбрать несколько символов.
как мы знаем, в регулярных выражениях выбирается только один символ.
наше выражение должно иметь возможность выбирать все символы, заключенные в пару фигурных скобок.
после квадратных скобок добавьте символ "плюс".
если мы посмотрим на результаты, то увидим, что был выбран заполнитель транзакции.
мы успешно написали регулярное выражение для выбора заполнителей.
давай попробуем использовать его в нашем фреймворке.
скопируйте это выражение в буфер обмена.
затем откройте файл router в своем редакторе.
мы собираемся обновить метод добавления.
прежде чем вставлять запись в массив маршрутов, мы обновим путь, создав переменную с именем regexpath.
значением будет функция preg replace.
функция preg replace выполняет регулярное выражение для строки.
помимо поиска значения, программа заменит совпадение любым значением, которое нам нужно.
еще раз повторяю, мы собираемся заменить путь, передаваемый маршрутизатору, регулярным выражением.
поступая таким образом, мы сможем извлекать значения из пути.
1-м аргументом этой функции является регулярное выражение.
давайте введем наше обычное регулярное выражение.
далее мы должны указать значение, которое мы хотели бы использовать в качестве замены.
заменяющим значением будет регулярное выражение без символов хэша и фигурных скобок.
заключите выражение в пару круглых скобок.
имей в виду, что мы собираемся разрешить использовать пути для поддержки нескольких параметров.
если это так, нам нужно извлечь несколько значений из одного пути.
мы используем одно и то же выражение с круглыми скобками вместо фигурных скобок.
круглые скобки создают группу.
в регулярных выражениях нередко выбирается несколько значений.
добавив эти символы, мы сможем выбрать несколько значений из одной строки.
последним аргументом этой функции является строка для выполнения регулярного выражения.
передай переменную path.
после этого давайте добавим этот новый путь к записи в массиве в элемент с именем regexpath, заданный переменной regexpath.
наконец, давайте воспользуемся нашим регулярным выражением внутри метода отправки.
если вы перейдете к этому методу, то увидите условный оператор для проверки текущего пути с помощью регулярного выражения.
давайте заменим переменную в 1-м аргументе функции pragmatch переменной route regexpath.
после внесения этих изменений мы можем попробовать протестировать нашу работу.
попробуйте зайти на страницу в браузере, чтобы отредактировать транзакцию.
наше приложение выдает ошибку.
если присмотреться, ошибка указывает на то, что метод просмотра редактирования не предоставляет массив, называемый параметрами.
это здорово.
ну, не совсем так.
в идеале этот маршрут должен отображать форму.
однако наш маршрутизатор способен найти маршрут, соответствующий URL-адресу.
раньше мы получали пустую страницу, потому что наш маршрутизатор не мог найти совпадение.
теперь, когда он может найти совпадение, мы сможем отобразить метод.
до тех пор, пока вы получаете подобную ошибку, все в порядке.
в следующей лекции давайте извлекем значения из пути и передадим их нашему методу controllers.