重定向不同的视图脚本

时间:2019-03-26 13:54:50

标签: zend-framework zend-framework3 zend-view zend-router

我想根据用户可以填写的搜索类型重定向到不同的视图脚本。

例如:用户想要搜索一个人,而不是我想要使用与人匹配的视图脚本(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']);
        }

在屏幕快照中,我的文件夹将显示:

enter image description here

在这种情况下,如何在不调用匹配控制器动作的情况下使用现有的视图脚本?

2 个答案:

答案 0 :(得分:2)

我认为您应该在setTemplate中提供指向switch的完整模板路径

    $view = new ViewModel([
                   'ansprechpartner' => $this->ansprechpartnerTable->sucheAnsprechpartner($suche['suche']),
                        ]);
   $view->setTemplate('stammdaten/ansprechpartner/index');
   return $view;

答案 1 :(得分:0)

此开关应该在Action(在控制器中)中。这是永远都不应忽视的逻辑。但是,如果您确实要在某项操作中使用它,则可以利用ZF来set a different layout

链接示例:

// 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');

  //...
}