YiiFramework Логика контроллера и mvc в yii

Softman1

Новичок
Здравствуйте.
Представим есть страница и ее основное содержимое - форма контакта.
Для этой формы все понятно: По текущему пути, внутри найденного контроллера/действия, создается модель формы и обрабатывается сабмит(если произошел) или модель формы передается в нужный вид для отображения формы пользователю.
Но например в левом сайдбаре у меня в блоке тоже есть какая то форма, например логина.
Как с ней то быть?
По умолчанию что yii предлагает (но как то сомнения вызывает у меня):
В файле слоя (layout) выводится виджет формы.
Класс этого виджета в его методе run() делает все тоже что и Контроллер из первого примера. Т.е. виджет работает как контроллер.

p.s. уже пробовал спрашивать на других ресурсах, но без особого толка. Почему то советуют ну совсем уж бестолковый вариант указания action-а вот этой "сайдбарной" формы на отдельную страницу, куда запрос и отправится, а при ошибках средиректится назад. Ну не то же. Action этой формы должен быть такой же как у текущей страницы.
Вон для примера, надо как работает форма входа на этом сайте(это друпал):
http://wkusno.org/node?destination=node

p.s.2 То что для примера форма логина не в счет, смысл что может быть любая форма и где то надо действие контроллера ей прописать.
 

Softman1

Новичок
Забавно получается, что одна форма, что другая форма. И в workflow должны обрабатываться единообразным образом.
Но для основного содержимого страницы контроллер то есть.
А для всего остального нет ничего.
Может поведение для контроллера можно приспособить под это или что то типа того. Назвать его помощник контроллера с подвязкой на событие Controller::EVENT_AFTER_ACTION с передачей контента через $view->blocks (yii2).
Как возможно нормально это сделать?
 

HQ0

Новичок
Мне стало очень интересно, но я задачи понять так и не смог. :(
В чем проблема две формы обрабатывать одним экшеном?
И всё-таки чем плох вариант с отдельным экшеном для формы которая определяется в лэйауте?
 

WMix

герр M:)ller
Партнер клуба
Softman1, а вот если это не yii, а простой php, как будешь решать задачу?
 

Softman1

Новичок
WMix, на самописе тут нет проблем. В друпале же элементарно эта система блоков реализована и работает на ура. По сути работать будет так как если бы я всю эту форму в yii виджет запихал.

HQ0, текущий экшен даже логически не связан никак с какой то формой из блока. Ее показ контролируется на разных страницах сайта для разных условий и к основному действию страницы связи нет.

Mikslr, я форму эту создаю на текущей странице и обработать приход данных от нее я должен на этой же странице, потому что эта форма является объектом этой страницы. Перекидывать по action куда то и в случае ошибок кидать обратно - это уродливый костыль. Посмотрите как удобно и логично работает форма на том друпал сайте что я показал, чтобы понять о чем речь.
 

WMix

герр M:)ller
Партнер клуба
Softman1, ты вопрос не понял, дело не в том есть проблемы или нет, меня механизм распознования интересует, как ты определяешь какой из обработчиков формы должет сработать а какой нет. на имя кнопки ореентируешься или как? (начнем с уровня HTTP)
Перекидывать по action куда то и в случае ошибок кидать обратно - это уродливый костыль.
тоесть остаемся в почте даже если форма заполнена правильно?
 

Softman1

Новичок
WMix.
1) Не на имя кнопки, это совсем по детски.
Любая форма идентифицируется по уникальному имени, которое передается в теге <input name="name" type="hidden">.
Но с этим и в yii нет проблем, там формы и их данные "спрятаны" за именем модели. Так что распознать какая форма засабмичена не проблема. Не об этом вообще вопрос то.

2) Пока есть ошибки их текст показывается на текущей странице. Когда введено верно то защита от F5 и редирект на туже самую текущую страницу , ну или если надо по логике то куда то еще.
 

Softman1

Новичок
WMix, ну это как раз то что я предполагал - прицепиться к одному из событий контроллера.

HQ0, ну попробуй сделать форму контакта в левом блоке, которая будет показываться на 3-ех каких то страницах(на каких настраивается из админки) и покажи свое решение. Может если попробовав что то сделать то и поймешь.
 

HQ0

Новичок
HQ0, ну попробуй сделать форму контакта в левом блоке, которая будет показываться на 3-ех каких то страницах(на каких настраивается из админки) и покажи свое решение. Может если попробовав что то сделать то и поймешь.
Ты уже давно сам дал ответ на свой вопрос.
В лэйауте клип, в экшне в зависимости от твоего параметра генерим форму в клипе, поведение с онБефорЭкшн обрабатывает форму если она есть.
Чем плох твой вариант?
 

Softman1

Новичок
HQ0
> в экшне в зависимости от твоего параметра генерим форму в клипе

в каком экшене? В каждом экшене сайта?
 

HQ0

Новичок
Смотря что ты имеешь ввиду под настраиванием из админки. Как именно ты хочешь указывать на каких страницах отображать форму? Просто урлы сохранять в файлик? Код может переехать и в поведение.
А может у тебя контроллер статических страниц ,например, и флажок отображения формы у каждой записи есть?
 

Softman1

Новичок
HQ0
> Смотря что ты имеешь ввиду под настраиванием из админки.

да любые страницы сайта, например:
news/view?id=100
news/view?id=70
site/about

Про Виджет я сразу и думал, он естественной вещью выглядит. Как бы все в одном месте.
Путает то что в виджет перемещается не только представление а и вообще вся форма с обработкой. И получается что для любой модели формы прийдется еще по виджету создать.
Которые тоже как бы в лайоте выводятся, вроде как уровень представления это.
 

Redjik

Джедай-мастер
Код:
class CWidget extends CBaseController
еше вопросы?
виджет это микроконтроллер, который может и к модели обратиться и вьюху отрендерить
И получается что для любой модели формы прийдется еще по виджету создать.
нафига?
 

MiksIr

miksir@home:~$
Путает то что в виджет перемещается не только представление а и вообще вся форма с обработкой.
Там этой обработки будет - несколько строчек - загнать данные в какую-нибудь модель UserForm и вызвать метод проверки.
 
Сверху