#zend-framework #zend-framework3 #zend-view #zend-router
#zend-framework #zend-framework3 #zend-view #zend-маршрутизатор
Вопрос:
Я хочу перенаправить на разные сценарии просмотра, зависит от типа поиска, который может ввести пользователь.
Например: пользователь хочет выполнить поиск человека, тогда я хочу использовать соответствующие скрипты просмотра для людей (ansprechpartner). Пожалуйста, взгляните на часть моего действия контроллера:
switch ($suche['suchtyp']) {
case 1: //Ansprechpartner
$view = new ViewModel([
'ansprechpartner' => $this->ansprechpartnerTable->sucheAnsprechpartner($suche['suche']),
]);
$view->setTemplate('ansprechpartner/index');
return $view;
break;
case 2: //Mandant
$view = new ViewModel([
'mandant' => $this->mandantTable->sucheMandant($suche['suche']),
]);
$view->setTemplate('mandant/index');
return $view;
break;
case 3: //vertrag
$view = new ViewModel([
'vertrag' => $this->vertragTable->sucheVertrag($suche['suche']),
]);
$view->setTemplate('vertrag/index');
return $view;
break;
default:
return $this->redirect()->toRoute('index', ['action' => 'index']);
}
На скриншоте будут показаны мои папки:
Итак, как я могу использовать существующие viewscripts в этом случае, не вызывая соответствующие действия контроллера?
Комментарии:
1. Путь к шаблону всегда должен быть полным. Правильный путь -«stammdaten / ansprechpartner/index», «stammdaten / mandant /index» и «stammdaten / vertrag /index»
Ответ №1:
Я думаю, вам следует указать полный путь к шаблону setTemplate
в вашем switch
$view = new ViewModel([
'ansprechpartner' => $this->ansprechpartnerTable->sucheAnsprechpartner($suche['suche']),
]);
$view->setTemplate('stammdaten/ansprechpartner/index');
return $view;
Ответ №2:
Этот переключатель должен быть в действии (в контроллере). Это та логика, которая никогда не должна быть в поле зрения. Однако, если у вас есть это в действии, вы можете использовать ZF для установки другого макета
Пример по ссылке:
// A controller's action method that uses an alternative
// layout template.
public function indexAction()
{
//...
// Use the Layout plugin to access the ViewModel
// object associated with layout template.
$this->layout()->setTemplate('layout/layout2');
//...
}
Комментарии:
1. хм, мой опубликованный код — это действие контроллера. Моя проблема больше похожа на проблему маршрутизации, она не связана с настройкой макета. Я не совсем понимаю концепцию, как переключиться на другие действия контроллера. В моем коммутаторе я хочу перенаправить, например, на mandant / index или ansprechpartner / index, как я могу это сделать, указав переменную mandant, ansprechpartner и т.д. в представление?
2. Итак, вы имеете в виду отправку пользователя на другой контроллер (и, следовательно, полное перенаправление), или вы имеете в виду выполнить другой контроллер-> действие где-нибудь и использовать результат?