Zend框架2显示的图内的图(Zend Framework 2 display a view wit

2019-08-01 04:21发布

我有两个模块管理和登录。

我想显示的管理视图中的登录视图“login.phtml“的index.html”

我已经在管理模块的indexAction控制器以下

public function indexAction()
{    
    $login = new LoginController();

    $view = new ViewModel(array(
        'theloginform' => $login->loginAction(),
    ));

    return $view;
}

在登录控制器的LoginAction方法我返回视图模型为“login.phtml”文件。

public function LoginAction() {
       $view = new ViewModel();
       return $view;
}

作为可变“theloginform”是一个对象的的indexAction引发错误。

Catchable fatal error: Object of class Zend\View\Model\ViewModel could not be converted to string in...

如果我添加以下内容:

$authentication->loginAction()->captureTo('test')

该“index.phtml”显示字符串“内容”。

我已阅读,我可能需要渲染视图模型前,我把它分配给视图变量“theloginform”,但我似乎无法得到它的工作,我都试过,没有运气以下。

public function LoginAction() {

    $view = new ViewModel();

    $renderer = new PhpRenderer();
    $resolver = new Resolver\AggregateResolver();
    $map = new Resolver\TemplateMapResolver(array(
            'login'      => __DIR__ . '/../view/login.phtml'

    ));
    $resolver->attach($map);
    $view->setTemplate("login");
    return $renderer->render($view);
}

如果出现以下错误:

Zend\View\Renderer\PhpRenderer::render: Unable to render template "login"; resolver could not resolve to a file

我甚至曾尝试添加DI到autoload_classmap.php文件,但仍然得到了同样的错误,我有双重检查的login.phtml文件是在正确的路径:

“/Login/view/login/login/login.phtml”我甚至它复制到“/Login/src/Login/view/login.phtml”

很迷茫已经阅读然后重新读取Zend的文档,我只是想传递一个视图到另一个视图...

Answer 1:

在ZF 1.x中我可能会建议你建立一个被引用的观点占位符或回调的LoginAction的形式逻辑控制器插件的动作助手。

在ZF2它看起来像动作助手已被取代控制器插件 ,似乎通过触发事件管理器 ,并可能需要知道一个或多个的“管理者” 。 然而, 占位符视图助手依然存在,甚至似乎有点熟悉。

我建议你看看建筑/自适应控制器插件,然后可以连接到一个占位符视图助手您的登录表单显示。 你也许可以只用一个视图助手来获得所需的功能,如果你是幸运的。

我希望我能帮助更多的,但我仍然可以通过这个烂摊子涉水自己。

祝好运。



Answer 2:

如果你需要分享一些观点的内容,您可以使用该谐音:

$this->partial('partial/login.pthml', array()); //add this to your index view

你可以看到他们在这里

您还可以找到一些有用的信息: 如何Zend框架2渲染模块内部的谐音?



Answer 3:

按照这个 ZF2文件建立页面

在登录操作这样写:

    public function loginAction()
    {
        return new ViewModel();
    }

而在的indexAction:

    $view = new ViewModel(
                  array(
                    //here any thig you want to assign to index view
                  )
                );
    $loginView = new ViewModel(
                  array(
                        //here any thig you want to assign to login view
                    )
                );


    $loginView->setTemplate('moduleName/controllerName/login'); 

    $view->addChild($loginView, 'login');
    return $view

在index.phtml你可以只回声登录<? echo $this->login ?> <? echo $this->login ?>在任何你想显示loginView。



Answer 4:

在你管理视图,你必须使用渲染视图助手和回声脚本渲染,所以你可以做echo $this->render($this->theloginform);



文章来源: Zend Framework 2 display a view within a view