まず、私の質問が一般的すぎて漠然としすぎていたら申し訳ありません。正しい答えを探していましたが、検索方法がわからないのかもしれません。
ページに独立した「ブロック」を配置できるようにしたいと考えています。これは、コントローラーの通常のアクションのように動作します。したがって、たとえば、完全にサポートされるフォームを設定します。
もちろん、ViewModel 内に VieModel を配置することはできませんが、問題全体が解決するわけではありません。
現在、以下に貼り付けたようなコードがあります。ただし、たとえば検証エラーの場合、結果は別のページに表示されます
現時点では、次のコードを書きました。
<?php
class SettingsController extends AbstractActionController
{
public function changeNameAction() {
$changeNameView = new ViewModel();
$form = new ChangeNameForm();
$form->init();
$form->setAttribute('action',$this->url()->fromRoute('settings/changeName'));
if ($this->request->isPost()) {
$form->setData($this->request->getPost());
if ($form->isValid()) {
return $this->redirect()->toRoute('settings');
}
}
}
$changeNameView->setVariable('form',$form);
$changeNameView->setTemplate('settings/changeName');
return $changeNameView;
}
public function changeDomainAction() {
$changeDomainView = new ViewModel();
$form = new ChangeDomainForm();
$form->setServiceLocator($this->getServiceLocator());
$form->init();
$form->setAttribute('action',$this->url()->fromRoute('settings/changeDomain'));
if ($this->request->isPost()) {
$form->setData($this->request->getPost());
if ($form->isValid()) {
return $this->redirect()->toRoute('settings');
}
}
}
$changeDomainView->setVariable('form',$form);
$changeDomainView->setTemplate('settings/changeDomain');
return $changeDomainView;
}
public function settingsAction() {
$view = new ViewModel();
$view->addChild($this->changeNameAction(), 'changeName');
$view->addChild($this->changeLogoAction(), 'changeLogo');
return $view;
}
}
もちろん、3つのファイルビューがあります(settings.phtml、changeLogo.phtml、changeName.phtml)
settings.phtml
<?= $changeName ?>
<?= $changeLogo ?>
changeName.phtml
<?= $this->form()->render($form); ?>