4

我有两个模块 Admin 和 Login。

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

我在管理模块 indexAction 控制器中有以下内容

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

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

    return $view;
}

在 Login 控制器的 LoginAction 方法中,我返回“login.phtml”文件的 ViewModel。

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

indexAction 引发错误,因为变量 'theloginform' 是一个对象。

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

如果我添加以下内容:

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

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

我已经读到我可能需要在将 ViewModel 分配给视图变量“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 文档,我只想将一个视图传递给另一个视图......

4

4 回答 4

4

如果您需要共享一些视图内容,您可以使用部分内容:

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

你可以在这里阅读它们

您还可以找到一些有用的信息:Zend Framework 2 如何在模块中渲染部分内容?

于 2012-10-05T10:13:43.020 回答
4

根据这个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 ?>在任何你想显示 loginView 的地方回显登录。

于 2013-06-05T10:33:56.093 回答
1

在 ZF 1.x 中,我可能会建议您构建一个引用视图占位符或控制器插件的动作助手,该插件会回调 loginAction 以获取表单逻辑。

在 Zf2 中,动作助手似乎已被控制器插件取代,并且似乎是通过事件管理器触发的,并且可能需要了解一个或多个“管理器”。然而,占位符视图助手仍然存在,甚至看起来有些熟悉。

我建议您考虑为您的登录表单显示构建/调整一个控制器插件,然后可以将其附加到占位符视图助手。如果幸运的话,您可能只需要一个视图助手就可以获得所需的功能。

我希望我能提供更多帮助,但我自己仍在经历这个烂摊子。

祝你好运。

于 2012-10-06T06:51:00.547 回答
1

在您的管理视图中,您必须使用渲染视图助手并回显渲染的脚本,因此您可以这样做 echo $this->render($this->theloginform);

于 2013-05-24T17:47:16.867 回答