【问题标题】:Map the router placeholder with the URI values使用 URI 值映射路由器占位符
【发布时间】:2016-03-23 15:48:42
【问题描述】:

我不知道怎么解释,所以请放轻松。

路由器持有uri变量键

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

浏览器地址栏中的URI

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

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

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

如果你明白,请把我重定向到正确的资源。

【问题讨论】:

  • 我猜这不是普通的php?否则你可以遍历数组并替换值
  • @Keyboardninja 我目前正在做这件事
  • 你可以学习symfony's routing component。正是这样做的。
  • 尝试$_SERVER['QUERY_STRING'] 获取您的查询字符串,然后使用explode() 获取数组中的值。

标签: php symfony symfony-routing symfony-components


【解决方案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)

我真的相信这是最好的解决方案,希望对您有所帮助。

【讨论】:

    【解决方案2】:

    如果我正确理解您的问题,则可以使用 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多