首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Phalcon使用Phalcon\Tag或Phalcon\Forms创建窗体

Phalcon使用Phalcon\Tag或Phalcon\Forms创建窗体
EN

Stack Overflow用户
提问于 2014-12-05 11:35:18
回答 3查看 2.4K关注 0票数 2

我上下搜索,但是找不到创建表单的Phalcon\Tag或Phalcon\Forms哪个更好。

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

Phalcon文件说:

Phalcon\ forms是帮助开发人员在web应用程序中创建和维护表单的组件。 Phalcon\Tag旨在简化HTML标记的构建。它提供了一组帮助程序以动态方式生成HTML。

有人能帮我弄清楚这两种方法的优缺点吗?

谢谢

EN

回答 3

Stack Overflow用户

发布于 2014-12-06 04:07:18

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

新的表格类别:

代码语言:javascript
复制
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);

    }
}

主计长:

代码语言:javascript
复制
$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,代码如下:

代码语言:javascript
复制
    <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>
票数 5
EN

Stack Overflow用户

发布于 2015-04-15 07:19:39

很好的例子,总体来说,但我正在挣扎的闪光信息。在快速搜索google之后,我在阅读了文档之后更加困惑。有人说$this-> flash -> see ()应该放在视图中以查看闪存消息。虽然这会导致错误,我相信这是过去的事情。有人能告诉我,我应该放置什么闪存方法来查看闪存信息,或者我哪里出错了?

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

代码语言:javascript
复制
$di->set('flash', function() {
    return new Phalcon\Flash\Session(array(
        'error'=>'text-danger',
        'warning'=>'text-warning',
        'notice'=>'text-info',
        'success'=>'text-success'                
    ));
});
票数 0
EN

Stack Overflow用户

发布于 2016-04-05 07:21:21

这取决于你在工作的是什么。

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

因为他们很有活力。

这意味着您可以很容易地更改文本框与选择框,而无需接触模板。

您可以添加验证,而不必担心模板和其他内容。

对于最可重用的表单,如果需要的话,您可以重用表单。

因此,如果有较少的数据,那么您可以自由地使用其中的任何人,但更易暗示的是"Phalcon\Forms“,它非常动态和结构化。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27315044

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档