перенаправлять разные сценарии просмотра

#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. Итак, вы имеете в виду отправку пользователя на другой контроллер (и, следовательно, полное перенаправление), или вы имеете в виду выполнить другой контроллер-> действие где-нибудь и использовать результат?