router — Необязательное предварительное соответствие маршрута. Переполнение стека.

Пример:

http://mysite.domain/user1 //profile user 1
http://mysite.domain/user1/photos //photos user 1
http://mysite.domain/user1/friends //friends user 1

Действие только пользователя фотографии или друзей. Это мой код:

if (preg_match('/^\/([\w\-]+)(\/[photos|friends]+)$/i', $url, $m)) {
//code...
}

Но не работает, кто-нибудь может мне помочь?

0

Решение

Одна ошибка [photos|friends]+, Это будет соответствовать слишком широко, а именно любой комбинации упомянутых символов, включая |; не всю строку в том порядке, в котором вы ее поместили (либо 'photos' или же 'profile«).

Я думаю, что вы хотите, чтобы выражение '/^\/([\w\-]+)\/(photos|friends)$/i' — это предполагает $url является '/user1/photos' или же '/user1/friends',

Я бы предложил при сопоставлении URL-адресов использовать разделитель регулярных выражений, кроме /потому что необходимость избежать всех слешей делает выражение сложным для понимания. Лично мне нравится использовать запятую (так как это редко встречается в URL): ',^/([\w\-]+)/(photos|friends)$,i',

Обновить

Сделать последнюю часть (/photos или же /friends) необязательно, используйте ',^/([\w\-]+)(/(photos|friends))?$,i', Если вы хотите разрешить /user1/ (с косой чертой), вы можете сделать это еще проще ',^/([\w\-]+)/(photos|friends)?$,i',

? сделает предыдущий токен необязательным (в первом случае это (/(photos|friends))во втором случае это просто (photos|friends),

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]