我不知道如何解释,所以请对我宽容一点。
路由器持有uri可变密钥
$router = 'movie/english/{slug}/edit/(id}/{title}';
浏览器地址栏中的URI
$uri = 'movie/english/scorpion/edit/125/E01E05';
如何编写将路由器占位符变量映射为URI匹配值的代码。例如
array(
'slug' => 'scorpion',
'id' => '125',
'title' => 'E01E05'
);
如果你能理解,请将我重定向到正确的资源。
您可以为此编写自定义解决方案,但每次需要更多东西时都会显示轮子,这就是为什么我的建议使用最佳实践:
composer require symfony/routing
<?php
require './vendor/autoload.php';
use SymfonyComponentRoutingMatcherUrlMatcher;
use SymfonyComponentRoutingRequestContext;
use SymfonyComponentRoutingRoute;
use SymfonyComponentRoutingRouteCollection;
$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)"鼻涕虫"=>字符串"蝎子"(长度=8)'id'=>字符串'125'(长度=3)'title'=>字符串'E01E05'(长度=6)'_route'=>字符串'route_name'(长度=10)
我真的相信这是最好的解决方案,希望它能帮助你。
如果我正确理解您的要求,可以使用str_replace:通过细节数组将$router
转换为$uri
$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