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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Роутинг

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
risktaker
Отправлено: 03 Марта, 2013 - 11:01:27
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Чем лучше пользоваться, автороутингом или ручным(указывать для каждого контроллера)?
Сейчас у меня автороутинг:
PHP:
скопировать код в буфер обмена
  1. return array(
  2.     'routes' => array(
  3.         '^$' => 'controller=default&action=index',
  4.         '^(a-zA-Z)$' => 'controller=$1&action=index',
  5.         '/^(a-zA-Z)\/(a-zA-Z)$/u' => 'controller=$1&action=$2'
  6.     )
  7. );

Как это можно сократить?
Если пользоваться ручным то как лучше проверять url, preg_match?

(Отредактировано автором: 03 Марта, 2013 - 11:09:39)

 
 Top
dubasua
Отправлено: 03 Марта, 2013 - 11:17:25
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




risktaker пишет:
return array(
    'routes' => array(
        '^$' => 'controller=default&action=index',
        '^(a-zA-Z)$' => 'controller=$1&action=index',
        '/^(a-zA-Z)\/(a-zA-Z)$/u' => 'controller=$1&action=$2'
    )
);

Где то я такое видел... Кажется в yui....
 
 Top
risktaker
Отправлено: 03 Марта, 2013 - 12:02:23
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




dubasua пишет:
risktaker пишет:
return array(
    'routes' => array(
        '^$' => 'controller=default&action=index',
        '^(a-zA-Z)$' => 'controller=$1&action=index',
        '/^(a-zA-Z)\/(a-zA-Z)$/u' => 'controller=$1&action=$2'
    )
);

Где то я такое видел... Кажется в yui....

Я не копипастил..
Суть вопроса остается той же:
Как правильнее и быстрее проверять

(Отредактировано автором: 03 Марта, 2013 - 12:43:02)

 
 Top
dubasua
Отправлено: 03 Марта, 2013 - 13:06:21
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Я храню pattrrn`ы в ini файлах, и проверяю их preg_match. Работает нормально. А есть еще идеи?
 
 Top
risktaker
Отправлено: 03 Марта, 2013 - 13:10:16
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




dubasua пишет:
Я храню pattrrn`ы в ini файлах, и проверяю их preg_match. Работает нормально. А есть еще идеи?

pattern-ы именно для каждого контроллера или общие?
 
 Top
dubasua
Отправлено: 03 Марта, 2013 - 13:20:54
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Контроллер у меня один, он и ищет паттерн, а от совпавшего паттерна, я пускаю другой компонент, если другой компонент парсит урл еще раз, и дальше делает свое дело, то один, а если нет, то каждый. например, есть урл "/категории", я его храню так "/^\/категории$/", если категория принимает другой парметр, например страницы, я его записываю так "/^\/категории(\/[\d])?$/", так как страниц может быть много, нет смысла записывать его так "/^\/категории\/1$/", "/^\/категории\/2$/","/^\/категории\/3$/"
 
 Top
risktaker
Отправлено: 03 Марта, 2013 - 13:25:11
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Ок, другой вопрос - как передать контроллеру id статьи, как свойство класса или как параметры при вызове екшна?
 
 Top
digi
Отправлено: 03 Марта, 2013 - 13:28:07
Post Id


Посетитель


Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012  


Помог: 4 раз(а)




ручным ;) тогда при изменении приложения не будет зависимости формата запросов к именам и методам классов... тем более что маршрутов не так уж и много требуется...

для ускорения партинга автоматически генерируется файл appUrlMatcher php в котором аккуратненько расписан процесс парсинга и от возвращает в ответ имя контроллера, экшена и аргументов для него Улыбка
 
 Top
dubasua
Отправлено: 03 Марта, 2013 - 13:29:27
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




Фрагмент содержимого ini файла
CODE (htmlphp):
скопировать код в буфер обмена
  1. [5]
  2. pat = "/^\/категории$/"
  3. [param]page = 1
  4. [param]tpl = categories/full_list.php
  5. [param]limit = 2
  6. [param]order = id
 
 Top
digi
Отправлено: 03 Марта, 2013 - 13:37:53
Post Id


Посетитель


Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012  


Помог: 4 раз(а)




лучше всёже в yaml оформлять маршруты ;)) например
CODE (html):
скопировать код в буфер обмена
  1.  
  2. # отобразить запись блога
  3. blog_show:
  4.   path: /blog/{id}.html
  5.   defaults: { _controller: MyBlogController:showPostAction }
  6.   # id - Должен быть целым числом.
  7.   requirements: { id:  \d+ }
  8.  


в общем-то вот тут дока http://symfony[dot]com/doc/master/co[dot][dot][dot]ntroduction[dot]html
 
 Top
dubasua
Отправлено: 03 Марта, 2013 - 13:52:12
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




А как же красивые урл?? у блога что нет категорий???
 
 Top
risktaker
Отправлено: 03 Марта, 2013 - 13:53:32
Post Id


Новичок


Покинул форум
Сообщений всего: 29
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Если именными то тогда вопрос:
Есть 10 контроллеров, тогда рутов должно быть больше, например:
PHP:
скопировать код в буфер обмена
  1.  
  2. 'index/%action%/%id%' => 'index/%action%',
  3. 'index/%action%/%id%/%page%/' => 'index/%action%'
  4.  

(%action% будет автоматически заменятся на (a-zA-Z))
Ведь page может быть, а может и не быть.

И еще:
PHP:
скопировать код в буфер обмена
  1.  
  2. 'index/index/%id%' => 'index/index',
  3. 'index/index/%id%/%page%/' => 'index/index',
  4. 'index/%action%/%id%' => 'index/%action%',
  5. 'index/%action%/%id%/%page%/' => 'index/%action%'
  6.  

(Отредактировано автором: 03 Марта, 2013 - 13:54:48)

 
 Top
digi
Отправлено: 03 Марта, 2013 - 13:58:38
Post Id


Посетитель


Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012  


Помог: 4 раз(а)




dubasua пишет:
А как же красивые урл?? у блога что нет категорий???


да легко! Улыбка)

CODE (html):
скопировать код в буфер обмена
  1.  
  2. # отобразить запись блога в категории
  3. blog_show_in_category:
  4.   path: /blog/{category}/{id}.html
  5.   defaults: { _controller: MyBlogController:showPostAction }
  6.   # id - Должен быть целым числом.
  7.   requirements: { id:  \d+ }
  8.  


в общем тут фантазии вообще нет предела ;)


risktaker пишет:
Если именными то тогда вопрос:
Есть 10 контроллеров, тогда рутов должно быть больше


с чего вдруг?? форматы ссылок (маршруты) по которым работает приложение, никак не связано с его внутренним устройством. может быть 1 котроллер и 10 экшенов, может быть 1 контроллер, 1 экшен, а отличаться все роуты только аргументами...

опять же надо иметь ввиду, что нужна еще обратная генерация маршрута! например надо надо получиться ссылку первой записи блога, значит должен быть сервис который это сделает, напрмиер так:
PHP:
скопировать код в буфер обмена
  1. $uri = $this->get('router')->generate('blog_show', ['id' => 1]);

(Отредактировано автором: 03 Марта, 2013 - 14:04:01)

 
 Top
dubasua
Отправлено: 03 Марта, 2013 - 14:02:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012  


Помог: 7 раз(а)




digi пишет:
да легко! )

А если у категории блога, еще 5 категорий вложенных друг в друга, а потом когда нибудь понадобится перенести пост из пятой категории в первую???
 
 Top
digi
Отправлено: 03 Марта, 2013 - 14:09:50
Post Id


Посетитель


Покинул форум
Сообщений всего: 406
Дата рег-ции: Янв. 2012  


Помог: 4 раз(а)




dubasua пишет:
А если у категории блога, еще 5 категорий вложенных друг в друга, а потом когда нибудь понадобится перенести пост из пятой категории в первую???

есть такие задачи Улыбка но это уже называется "динамический роутинг" т.е. в таком случае разгребание строки запроса берет на себя сам контроллер, который может переворошить по категориям, которы хранятся например в БД, например так:
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. # блог
  3. blog:
  4.   path: /blog/{slug}
  5.   methods: GET
  6.   defaults: { _controller: MyBlogController:indexAction, slug: "" }
  7.   # slug - может быть любой строкой.
  8.  requirements: { slug:  ".+"}
  9.  
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB