jcmax
@jcmax
Супер Пользователь

Как организовать поиск ключа массива по маске в php?

Скомуниздил роутер и все работает. Контроллеры и методы определяет и запускает и все ok, все отрабатывается.

Проблема возникла в том, что шаблон не понимает, что ему выводить, так как роутер исполняет и все.
Пример путей роутера:
$routes = array(
	'/posts/:any'		=> 'Controller/method/param',
	'/posts/edit/:any'	=> 'Controller/method/param',
	'/posts/remove/:any'=> 'Controller/method/param',
	'/articles/:any'	=> 'Controller/method/param',
	'/users/:any'		=> 'Controller/method/param',
	'/articles/'		=> 'Controller/method/param',
	'/users/friends/all'=> 'Controller/method/param',
);

А метод который возвращает например :

$uri = Routes::getRoutes();
echo $uri;  // /posts/edit/hello-world
// или 
echo $uri;  // /users/mrJohnDoe/
// или 
echo $uri;  // /users/friends/all


Мне нужно, чтобы результат, который приходит из $uri <-- как ключ вытаскивал из $routes тот параметр который указан в $uri.

Единственное приходит в голову - preg_match. Но как понять, что придет?
  • Вопрос задан
  • 268 просмотров
Решения вопроса 1
@zhainar
Гуглю за вас
как я понял, надо найти маску, которая соответствует роуту. Что-то вроде:
$uri = Routes::getRoutes();
foreach($routes as $regex => $controller) {
  if (preg_match(str_replace(':any', '.+', $regex), $uri)) {
    return $controller;
  }
}
return $controller_404;
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
нихрена не понятно. Напишите что вы хотите получить. Единственное что понятно - что вы что-то не так делаете.
Ответ написан
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Стоит выставить соответствующие теги чтобы отвечающие понимали про какой роутинг речь.
Если вопрос про Laravel то попробуйте

https://laravel.com/docs/master/routing#accessing-...

<?php
$route = Route::current();

$name = Route::currentRouteName();

$action = Route::currentRouteAction();
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы