Сопоставьте местозаполнитель маршрутизатора со значениями URI

Я не знаю, как это объяснить, поэтому, пожалуйста, будьте осторожны со мной.

Маршрутизатор содержит переменный ключ URI

$router = 'movie/english/{slug}/edit/(id}/{title}';

URI в адресной строке браузера

$uri = 'movie/english/scorpion/edit/125/E01E05';

Как я могу написать код, который сопоставит переменную-заполнитель маршрутизатора со значением, соответствующим URI. Например.

array(
'slug' => 'scorpion',
'id' => '125',
'title' => 'E01E05'
);

Пожалуйста, если вы понимаете, вы можете перенаправить меня на правильный ресурс.

2

Решение

Вы можете написать собственное решение для этого, но вы будете показывать колесо каждый раз, когда вам понадобится что-то большее, поэтому мой совет использует лучшие практики:

composer require symfony/routing

<?php

require './vendor/autoload.php';

use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\Route;
use Symfony\Component\Routing\RouteCollection;

$route = new Route(
'/movie/english/{slug}/edit/{id}/{title}',
array('controller' => 'MyController')
);
$routes = new RouteCollection();
$routes->add('route_name', $route);

$context = new RequestContext();
$matcher = new UrlMatcher($routes, $context);
$parameters = $matcher->match('/movie/english/scorpion/edit/125/E01E05');

var_dump($parameters);

напечатает:

массив (размер = 5)
'controller' => строка 'MyController' (длина = 12)
'slug' => строка 'скорпион' (длина = 8)
'id' => строка '125' (длина = 3)
'title' => строка 'E01E05' ​​(длина = 6)
'_route' => строка 'route_name' (длина = 10)

Я искренне верю, что это лучшее решение, надеюсь, оно вам поможет.

1

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

Если я правильно понимаю, что вы спрашиваете, трансформируя $router в $uri через массив деталей может быть достигнуто с str_replace:

$router = 'movie/english/{slug}/edit/{id}/{title}';

$details = array(
'slug' => 'scorpion',
'id' => '125',
'title' => 'E01E05'
);

$uri = str_replace(array('{slug}','{id}','{title}'), $details, $router);

echo $uri;
// movie/english/scorpion/edit/125/E01E05
0

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