0

まず、私の質問が一般的すぎて漠然としすぎていたら申し訳ありません。正しい答えを探していましたが、検索方法がわからないのかもしれません。

ページに独立した「ブロック」を配置できるようにしたいと考えています。これは、コントローラーの通常のアクションのように動作します。したがって、たとえば、完全にサポートされるフォームを設定します。

もちろん、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); ?>
4

0 に答える 0