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 :: Версия для печати :: Zend Router
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Zend Router

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

1. DeepVarvar - 21 Мая, 2012 - 18:53:31 - перейти к сообщению
Имеется запрос вида (убрал ури-компонентс чтобы было понятно):
CODE (text):
скопировать код в буфер обмена
  1. http://site.ru/multiple?q[]=/a?type=x&q[]=/b?type=y&q[]=/c?type=z

Есть ли возможность, получив уже в екшне контроллера multiple, перебирая в цикле параметр q скормить их последовательно соответствующим контроллерам и собрать вывод?
Можно ли унаследоваться от основного роутера, а там раздать запросы и собрать результаты?

Через какое отверстие этот вопрос решаем в зенде?
2. DeepVarvar - 22 Мая, 2012 - 12:46:12 - перейти к сообщению
Просмотров мало, сделаю АП - еще актуально. Закатив глазки
3. Мелкий - 22 Мая, 2012 - 12:56:49 - перейти к сообщению
Запрос именно такой или дважды url-кодированный?
Если дважды кодируемый - проблемы нет, $_GET нормально разбирает и получает массив q, к которому потом parse_str и получаем всё, что надо.

Если единожды (т.е. как представлен) - разбирать ручками, от q до q. Более подходящих средств не помню.
4. DeepVarvar - 22 Мая, 2012 - 13:42:33 - перейти к сообщению
Мелкий пишет:
q, к которому потом parse_str и получаем всё, что надо.

Да, запрос урл-кодированый. Он уже разобран в массив и готов к использованию.
Вопрос в том что делать дальше? Кого и как кормить в цикле полученными урлами?
Главное: не писать свой велосипед, а использовать возможности зенда.
5. Champion - 22 Мая, 2012 - 14:32:51 - перейти к сообщению
может быть, Zend_Controller_Action::_forward() ?
6. DeepVarvar - 22 Мая, 2012 - 16:14:10 - перейти к сообщению
Champion пишет:
forward
@return void
Он дергает контроллер, но тот забивает свою вьюху.
А нужно вернуть результат и забить исходную вьюху.

Zend_Controller_Action_Helper_ActionStack - с ним работает как надо.
У нас есть список урл-адресов, роуты прописаны в конфиге (там еще и права ролей есть).
Просто так динамически разобирать строку урлы уже не будешь.

Полюбому есть какой-нибуть банальный set_Url() или setParams() который может подсунуть стеку нужный кусок из массива в цикле.
Вобщем нужно изобразить что-то типа форка - раздать данные и собрать их обратно так, чтобы они обработались как "сингловые" запросы, независимо друг от друга.
7. grechan - 21 Января, 2013 - 16:57:41 - перейти к сообщению
Помогите, знатоки Zend-а.
В конфигах прописываю
CODE (htmlphp):
скопировать код в буфер обмена
  1.  
  2. resources.router.routes.show.type = "Zend_Controller_Router_Route_Regex"
  3. resources.router.routes.show.route = "page/(\w+)"
  4. resources.router.routes.show.defaults.module = default
  5. resources.router.routes.show.defaults.controller = "page"
  6. resources.router.routes.show.defaults.action = "show"
  7. resources.router.routes.show.map.1 = "id"
  8. resources.router.routes.show.reverse = "page/%s"
  9.  


дальше
формирую сам маршрут (ссылку)
PHP:
скопировать код в буфер обмена
  1.  
  2. <a href="'. $this->url(array('controller' => 'page', 'action' => 'show', 'id'=>$result['id'])). '">'.$result['name'].'</a>
  3.  


Хочу получить ссылку вида page/show/1 или page/show/3

Но получаю ссылку вида page/show/id/1 или page/show/id/3

И вообще ссылки вида page/show/id/1 или page/show/id/3 у меня работают без всякой настройки router-а в конфигах.
Подскажите, кто знает. Я на этом подвис, не могу двигаться дальше. Официальную документацию почитал, но разобраться не смог. Спасибо.
8. DeepVarvar - 21 Января, 2013 - 17:31:31 - перейти к сообщению
Странно.. Мне, например было принципиально наоборот сделать все ссылки, где как ЧПУ выглядят только модуль, контроллер и экшн.

К тому же, мое мнение, вы занимаетесь ненужной заморочкой.
Оставьте как есть.
9. grechan - 22 Января, 2013 - 09:41:27 - перейти к сообщению
Разобрался в чем было дело - настройки роутера в конфигах
Поправил настройки роутера (application.ini)
PHP:
скопировать код в буфер обмена
  1.  
  2. resources.router.routes.id.type = "Zend_Controller_Router_Route_Regex"
  3. resources.router.routes.id.route = "page/(\w+)"
  4. resources.router.routes.id.defaults.module = default
  5. resources.router.routes.id.defaults.controller = page
  6. resources.router.routes.id.defaults.action = show
  7. resources.router.routes.id.map.1 = "id"
  8. resources.router.routes.id.reverse = "page/%s"
  9.  


маршрут устанавливаю так
PHP:
скопировать код в буфер обмена
  1.  
  2. $self = 'http://' . $_SERVER['SERVER_NAME'];
  3. ......
  4. echo '<a href="'.$self.'/page/'.$result['id'].'">'.$result['name'].'</a></br>';
  5. или
  6. echo '<a href="'. $this->url(array('controller' => 'page', 'action' => $result['id'])). '">'.$result['name'].'</a></br>';
  7.  


получается такая вот ссылочка
page/1 или page/2 или page/3

 

Powered by ExBB FM 1.0 RC1