2014-02-08 4 views
0

Я хочу прочитать и URL-адрес и проанализировать ее, чтобы передать ее часть в качестве параметра функции. Есть ли способ создать своего рода заполнитель в строке?Назначить динамический фрагмент строки переменной

Это код:

switch ('localhost/documents/') { 

    case 'img/{imageId}': 
    $image = $controller->showDocumentImage($imageId); 
    break; 
} 

Есть ли способ сделать это? Как я могу взять число после строки «img /» и передать его функции? Это должно быть что-то вроде успокоительной симуляции.

+0

Почему вы переключаете («localhost/documents/')? Я этого не понимаю ... этот код ничего не делает. –

+0

@kasperTaeymans Я создал фронт-контроллер, который разбирает '$ _SERVER ['REQUEST_URI']' и разбивает его на разные уровни подстроки. Коммутатор используется для создания экземпляров разных контроллеров на основе URL-адреса. Например: 'localhost/appname/documents/requestedMethod' создает экземпляр DocumentController и запускает функцию' requestMethod() '. –

ответ

0

Ваше заявление switch не имеет большого смысла.

Вы можете использовать regular expression, чтобы извлечь номер после img:

if (preg_match('#img/(?P<imageId>\d+)#', 'img/123', $matches)) { 
    // $matches['imageId'] == "123" 
    $controller->showDocumentImage($matches['imageId']); 
} 

Реально регулярное выражение вы используете, могут быть разными, в зависимости от ваших потребностей.

+0

В чем разница между вашим регулярным выражением и этим: '(? <= Img /).*(?=/)'? Я не привык к регулярному выражению. –

+0

Группы (круглые скобки, окруженные битами) - это положительный взгляд назад и вперед. Мое регулярное выражение говорит: match 'img /', за которым следует любое количество цифр. Ваш ответ: сопоставьте что-нибудь ('. *'), Которому предшествует 'img /', а затем '/'. – chrisguitarguy

+0

Считаете ли вы, что это было бы хорошо? '(? <= img /) (? P \ d +) (? = /)' Я не знаю, правильно ли я использую '' P '. –

Смежные вопросы