在单个页面上组合多个表单/控制器

时间:2014-12-04 00:01:15

标签: phalcon

我也在phalcon论坛上提出了这个问题,但还没有收到回复。

我正在尝试通过检查示例来学习phalcon。目前我正在研究Vokura的例子。

我想要做的是,而不是单独登录和注册页面,我想将它们放在一个页面上,比如说索引..

我查看了部分模板并尝试使用:

//views>index.volt
<div>{{ partial("session/login") }}</div>
<div>{{ partial("session/signup") }}</div>

我还包括:

//controllers>IndexController.php
use Vokuro\Forms\LoginForm;
use Vokuro\Forms\SignUpForm;

然而,这引发了错误

Notice: Undefined variable: form

我的问题是,我需要做什么才能在索引页面上包含登录和注册表单而不更改LoginForm.php,SignupForm.php,SessionController.php所以我也可以使用链接转到个人登录和注册页面。

希望我有任何意义,谢谢你。

1 个答案:

答案 0 :(得分:0)

假设您正在使用Vokuros的部分loginsignup形式,那将会变得有点棘手。

它们都需要在视图中使用$form变量,它们都使用该变量下的不同对象。如果您不想编辑这些部分,请参阅两步指南。

1制作表格

在索引控制器中,您正在声明您的用法。但形式必须实例化。以下是您可能希望针对您的案例进行调整的示例:

use Vokuro\Forms\LoginForm;
use Vokuro\Forms\SignUpForm;

class DefaultController extends \Phalcon\Mvc\Controller {

    function indexAction() {
        // declaration for further manipulations
        $scriptLoginForm = new LoginForm();
        $scriptSignUpForm = new SignUpForm();

        // manipulations space
        // ....

        // defining for view. Notice, that I presented here
        // that variables in View will have different names.
        $this->view->setVar('loginForm', $scriptLoginForm);
        $this->view->setVar('signUpForm', $scriptSignInForm);

        // default for using one form in view would be:
        // $this->view->setVar('form', $formInstance);
    }
}

2定义$form durng视图。

您可能希望在视图中操作一下,在适当的时候设置正确的表单实例。

{% set form = loginForm %}
<div>{{ partial("session/login") }}</div>

{% set form = signUpForm %}
<div>{{ partial("session/signup") }}</div>

或根据manual

<div>{{ partial("session/login", ['form': loginForm]) }}</div>
<div>{{ partial("session/signup", ['form': signUpForm]) }}</div>

没有经过测试的例子,但应该或多或少地以这种方式工作。

请注意,这是Vokuro 的独家示例。在开发自己的零件时,您可能会根据偏差来区分不同的变量名称,例如。在partial/login中使用$formLogin