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 :: Zend Router

 PHP.SU

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


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

> Описание: Мультики.
DeepVarvar Супермодератор
Отправлено: 21 Мая, 2012 - 18:53:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




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

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

Через какое отверстие этот вопрос решаем в зенде?

(Отредактировано автором: 21 Мая, 2012 - 18:59:14)

 
 Top
DeepVarvar Супермодератор
Отправлено: 22 Мая, 2012 - 12:46:12
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Просмотров мало, сделаю АП - еще актуально. Закатив глазки
 
 Top
Мелкий Супермодератор
Отправлено: 22 Мая, 2012 - 12:56:49
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Запрос именно такой или дважды url-кодированный?
Если дважды кодируемый - проблемы нет, $_GET нормально разбирает и получает массив q, к которому потом parse_str и получаем всё, что надо.

Если единожды (т.е. как представлен) - разбирать ручками, от q до q. Более подходящих средств не помню.


-----
PostgreSQL DBA
 
 Top
DeepVarvar Супермодератор
Отправлено: 22 Мая, 2012 - 13:42:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Мелкий пишет:
q, к которому потом parse_str и получаем всё, что надо.

Да, запрос урл-кодированый. Он уже разобран в массив и готов к использованию.
Вопрос в том что делать дальше? Кого и как кормить в цикле полученными урлами?
Главное: не писать свой велосипед, а использовать возможности зенда.
 
 Top
Champion Супермодератор
Отправлено: 22 Мая, 2012 - 14:32:51
Post Id



Активный участник


Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008  
Откуда: Москва


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




может быть, Zend_Controller_Action::_forward() ?
 
 Top
DeepVarvar Супермодератор
Отправлено: 22 Мая, 2012 - 16:14:10
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Champion пишет:
forward
@return void
Он дергает контроллер, но тот забивает свою вьюху.
А нужно вернуть результат и забить исходную вьюху.

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

Полюбому есть какой-нибуть банальный set_Url() или setParams() который может подсунуть стеку нужный кусок из массива в цикле.
Вобщем нужно изобразить что-то типа форка - раздать данные и собрать их обратно так, чтобы они обработались как "сингловые" запросы, независимо друг от друга.

(Отредактировано автором: 22 Мая, 2012 - 16:26:32)

 
 Top
grechan
Отправлено: 21 Января, 2013 - 16:57:41
Post Id


Новичок


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


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




Помогите, знатоки 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-а в конфигах.
Подскажите, кто знает. Я на этом подвис, не могу двигаться дальше. Официальную документацию почитал, но разобраться не смог. Спасибо.
 
 Top
DeepVarvar Супермодератор
Отправлено: 21 Января, 2013 - 17:31:31
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


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




Странно.. Мне, например было принципиально наоборот сделать все ссылки, где как ЧПУ выглядят только модуль, контроллер и экшн.

К тому же, мое мнение, вы занимаетесь ненужной заморочкой.
Оставьте как есть.
 
 Top
grechan
Отправлено: 22 Января, 2013 - 09:41:27
Post Id


Новичок


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


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




Разобрался в чем было дело - настройки роутера в конфигах
Поправил настройки роутера (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
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB