Phalcon使用Phalcon \ Tag或Phalcon \ Forms来创建表单

时间:2014-12-05 11:35:18

标签: forms phalcon

我上下搜索但无法找到哪一个更好的Phalcon \ Tag或Phalcon \ Forms来创建表单。

这两个类都具有创建表单元素的功能。但我发现Phalcon \ Tag中有一些方便的标签,例如Phalcon \ Tag :: emailField()或Phalcon \ Tag :: dateField(array())

Phalcon文档说:

  

" Phalcon \ Forms是一个帮助开发人员创建的组件   和维护Web应用程序中的表单。"

     

" Phalcon \ Tag旨在简化HTML标记的构建。它   提供了一组帮助器以动态方式生成HTML。"

任何人都可以帮助我使用这两种方法的优点和缺点。

由于

3 个答案:

答案 0 :(得分:5)

简单来说,Phalcon \ Tag用于设计html(用户视图)。但是对于验证&&将规则添加到您需要使用phalcon \ forms的表单中我将向您展示下面的phalcon \ forums的示例

NEW FORM CLASS:

use Phalcon\Forms\Form,
    Phalcon\Forms\Element\Password,
    Phalcon\Forms\Element\Email as Emailfield,
    Phalcon\Forms\Element\Check,
    Phalcon\Forms\Element\Hidden,
    Phalcon\Validation\Validator\PresenceOf,
    Phalcon\Validation\Validator\Identical,
    Phalcon\Validation\Validator\Email;

class LoginForm extends Form
{
    public function initialize()
    {
        $email = new Emailfield('email', array(
            'placeholder' => 'Type your Email'
        ));
        $email->setLabel('E-Mail');
        $email->setFilters('email');
        $email->addValidators(array(
            new PresenceOf(array(
                'message' => 'E-mail is required'
            )),
            new Email(array(
                'message' => 'E-mail is not valid'
            ))
        ));

        $this->add($email);

        $password = new Password('password', array(
            'placeholder' => 'Type your Password'
        ));
        $password->setLabel('Password');
        $password->setFilters(array('striptags', 'string'));
        $password->addValidators(array(
            new PresenceOf(array(
                'message' => 'Password required'
            ))
        ));
        $this->add($password);

        //Remember
        $long_login = new Check('long_login', array(
            'value' => 'yes'
        ));
        $long_login->setLabel('Keep me logged in');
        $this->add($long_login);

        // CSRF
        $csrf = new Hidden('csrf');
        $csrf->addValidator(new Identical(array(
            'value' => $this->security->getSessionToken(),
            'message' => 'CSRF validation failed'
        )));
       // $this->add($csrf);

    }
}

在控制器中:

$form = new LoginForm();
if (!empty($_POST)) {
    if (!$form->isValid($_POST)) {
        $errors = array();
        foreach ($form->getMessages() as $message) {
            $errors[] = $message;
        }
        if (!empty($errors))
            $this->flash->error(join('<br/>', $errors));
    } else {
        //Login Continues
    }
}


$this->view->setVar('form', $form);

要将此表单转换为html,请输入以下代码:

    <div class="form-group">
        {{ form.label('email',['class': 'control-label']) }}
        {{ form.render('email', ['class': 'form-control input-md']) }}
    </div>
    <div class="form-group">
        {{ form.label('password',['class': 'control-label']) }}
        {{ form.render('password', ['class': 'form-control input-md']) }}
    </div>
    <div class="checkbox">
        {{ form.render('long_login') }}
        {{ form.label('long_login') }}
    </div>

答案 1 :(得分:0)

一般来说这是一个很好的例子,但我正在努力解决这个问题。经过快速谷歌搜索后,我在阅读文档后更加困惑。有人说$ this-&gt; flash-&gt; output()应放在视图中以查看flash消息。虽然这会导致错误,但我相信这是过去的事情。有人可以告诉我应该放置什么flash方法来查看flash消息或我哪里出错?

编辑:我设法让Phalcon \ Flash \ Session工作,我相信它比Direct更适合我。为此,您需要在config / services.php中的Dependency Injector中注册flash服务。我还用bootstrap类替换了类。

$di->set('flash', function() {
    return new Phalcon\Flash\Session(array(
        'error'=>'text-danger',
        'warning'=>'text-warning',
        'notice'=>'text-info',
        'success'=>'text-success'                
    ));
});

答案 2 :(得分:0)

这取决于你在做什么。

如果我们说,您需要插入大量具有大量验证的数据,并且可能会在进度中发生变化,那么使用“Phalcon \ Forms”会好得多

因为它们非常有活力。

意味着您可以非常轻松地使用选择框更改文本框,而无需触摸模板。

您可以添加验证而无需担心模板和其他内容。

最重复使用的是,如果需要,可以重复使用表单。

因此,如果数据较少,那么您可以自由使用其中的任何一个,但更可取的是“Phalcon \ Forms”,它非常有活力和结构性。