2

我不知道如何解释,所以请放轻松。

路由器持有uri变量键

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

浏览器地址栏中的 URI

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

如何编写将路由器占位符变量与 URI 匹配值映射的代码。例如

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

请如果您理解可以将我重定向到正确的资源。

4

2 回答 2

1

您可以为此编写自定义解决方案,但是每次您需要更多东西时都会显示轮子,这就是我的建议使用最佳实践的原因:

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)
  '控制器' => 字符串'MyController' (长度=12)
  'slug' => 字符串'scorpion'(长度=8)
  'id' => 字符串'125'(长度=3)
  'title' => 字符串'E01E05'​​(长度=6)
  '_route' => 字符串'route_name'(长度=10)

我真的相信这是最好的解决方案,希望它会帮助你。

于 2015-12-17T10:32:32.257 回答
0

如果我理解您的要求正确,则可以使用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
于 2015-12-17T09:30:42.730 回答