首先,对不起,如果我的问题有点太笼统和太模糊。我正在寻找正确的答案 - 但也许我不知道如何搜索。
我希望能够放置在独立于页面的“块”上——其行为类似于控制器中的普通操作。因此,例如,将它们设置为完全支持的形式。
当然,我知道将 VieModel 放在 ViewModel 中——但这并不能解决整个问题。
我目前有如下粘贴的代码。但例如在验证错误的情况下,结果将显示在单独的页面上
目前我写了以下代码:
<?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 )
设置.phtml
<?= $changeName ?>
<?= $changeLogo ?>
更改名称.phtml
<?= $this->form()->render($form); ?>