Я бы хотел «очистить» мой URL с помощью фреймворка PHP ZF2. URL выглядит следующим образом:
http://sitename.com/testingtesting/?inviter123
Часть между именем сайта и параметром строки запроса — это та, которую я хотел бы выделить:
testingtesting
Также имя не обязательно должно быть тестирующим, оно может быть тестовым или любым другим, длина строки может варьироваться, что меня больше всего смущает. Вопрос здесь в том, как вынести все, что между / / строками, независимо от его размера …
Постскриптум На данный момент я сделал следующее:
$controllerName = substr($_SERVER["REQUEST_URI"],1,10);
Что возвращает мне следующее:
/testingtesting/?inviter123
Теперь вопрос в том, как избавиться от нежелательного содержимого в строке …
Редактировать:
Я решил использовать метод substr в PHP, я пропускаю первый элемент в массиве строк, но как получить динамическую длину того, что находится между / hereitcanbeanysize / …
Пробовал решение Роберта, вот что я получаю:
массив (4) {[«схема»] => строка (4) «http» [«хост»] => строка (12) «sitename.com» [«путь»] => строка (16) «/ testtesting / «[» query «] => string (10)» inviter123 «}
Теперь мне нужно избавиться от // в элементе «path» массива … Как я могу это сделать?
Ты можешь использовать parse_url () функционировать и объединять хост, схему и путь без запроса части.
Проверьте этот код:
$urlParts = parse_url('http://sitename.com/testingtesting/?inviter123');
echo str_replace('/' , '', $urlParts['path']);
Я думаю, что лучший способ сделать то, что вы хотите, это переписать URL в:
.Htaccess -если вы используете сервер Apache, или web.config -если вы используете IIS-.
Кроме того, вы можете захватить имя строки перед строкой запроса, чтобы использовать ее в логике вашего приложения.
.Пример htaccess:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^/testingtesting/(.*) /$1 [QSA]
Если вы просто хотите отобразить чистый URL:
$cleanUrl = str_replace('/testingtesting','', $_SERVER["REQUEST_URI"]);
Если вы используете ZF2, вы не должны использовать нативные функции php для такого рода вещей, вы должны использовать RouteMach
Класс для поиска / извлечения сегментов вашего совпавшего URL:
'route_name' => array(
'type' => 'segment',
'options' => array(
'route' => '/:controller[/:action]',
'constraints' => array(
'controller' => '[a-zA-Z][a-zA-Z0-9_-]+',
'action' => '[a-zA-Z][a-zA-Z0-9_-]+',
),
'defaults' => array(
'controller' => 'Application\Controller\IndexController',
'action' => 'index',
),
)
)
Теперь вы можете получить контроллер и действие из route-match (Zend\Mvc\Router\RouteMatch
);
/** @var MvcEvent $event */
$routeMatch = $event->getRouteMatch();
$controller = $routeMatch->getParam('controller');
$action = $routeMatch->getParam('action');
Проверьте также документация ZF2 по маршрутизация Вот.
Вы используете фреймворк, убедитесь, что вы знаете, как правильно его использовать. Использование нативных методов php, таких как substr
а также parse_url
определенно НЕ путь, когда вы хотите получить сегменты из вашего URL.
Обратитесь к руководству, чтобы ознакомиться с основами ZF2, например: Приложение скелета ZF2 (также известное как приложение альбома)