Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Вопрос по ЧПУ
Форумы портала PHP.SU » » Вопросы новичков » Вопрос по ЧПУ

Страниц (1): [1]
 

1. openlsd - 09 Ноября, 2018 - 09:14:50 - перейти к сообщению
Сделал себе подобие MVC на сайте

CODE (text):
скопировать код в буфер обмена
  1.  
  2. RewriteEngine on
  3. RewriteCond %{REQUEST_FILENAME} !-f
  4. RewriteCond %{REQUEST_FILENAME} !-d
  5. RewriteRule ^(.*)$ index.php?route=$1 [L,QSA]
  6.  


То есть по запросу /users/ я буду подключать users.php, но я не совсем понимаю как работать с параметрами вида:
/users/page/1/action/test/

Как принято такие параметры добавлять и извлекать чтобы все нормально работало? Не хочу изобретать новый велосипед Улыбка
2. andrewkard - 09 Ноября, 2018 - 09:28:21 - перейти к сообщению
Вот например, из YII:
PHP:
скопировать код в буфер обмена
  1.  
  2. '<controller:\w+>/<id:\d+>' => '<controller>/view',
  3. '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
  4. '<controller:\w+>/<action:\w+>' => '<controller>/<action>',
  5.  


users/1 - это вызов метода view контроллера users с гет параметром id = 1

users/delete/1 - это вызов метода delete контроллера users с гет параметром id = 1

users/index - аналогично
3. openlsd - 09 Ноября, 2018 - 09:30:00 - перейти к сообщению
andrewkard пишет:

users/1 - это вызов метода view контроллера users с гет параметром id = 1

users/delete/1 - это вызов метода delete контроллера users с гет параметром id = 1

users/index - аналогично


А если таких параметров много будет? Как в моем примере. Как вообще правильно их извлекать, ну и добавлять в ссылки?
4. andrewkard - 09 Ноября, 2018 - 09:46:58 - перейти к сообщению
openlsd пишет:
А если таких параметров много будет?

обычно их не много, если у Вас не так, пересмотрите структуру
явно что то в этом со запросе не так

/users/page/1/action/test/

а

/users/test/?p=1

вроде как получше и смысл тот же
5. openlsd - 09 Ноября, 2018 - 10:15:04 - перейти к сообщению
Ну хорошо. Вот у меня есть страница /users/ которая показывает список пользователей, а /users/page/5 5-ю страницу с пользователями. /users/add/ должна показывать форму. Мне нужно какой-то псевдороутер же написать чтобы правильные страницы инклудились? Как он примерно будет выглядеть.
6. andrewkard - 09 Ноября, 2018 - 12:39:45 - перейти к сообщению
Упрощенно так:
PHP:
скопировать код в буфер обмена
  1.  
  2. $controller = 'users';
  3. $action = 'index';
  4.  
  5. $parts = explode('/',$_SERVER["REQUEST_URI"]);
  6.  
  7. if(isset($parts[1])){
  8.     $controller = $parts[1];
  9. }
  10.  
  11. if(isset($parts[2])){
  12.     $action = $parts[2];
  13. }
  14.  
  15. if(class_exists($controller)){
  16.     $controller = new $controller;
  17. }
  18.  
  19. if(method_exists($controller,$action)){
  20.     return $controller->{$action};
  21. }
  22.  
7. openlsd - 09 Ноября, 2018 - 15:57:00 - перейти к сообщению
Понятно, благодарю

 

Powered by ExBB FM 1.0 RC1