2014-12-05 68 views
2

我搜索了上下,但找不到哪一个更好Phalcon \ Tag或Phalcon \ Forms来创建表单。Phalcon使用Phalcon Tag或Phalcon Forms来创建表单

这两个类都具有创建表单元素的功能。但是我发现有在尔康\标签一些方便的标签,例如尔康\标签:: emailField()或尔康\标签::的DateField(阵列())

尔康文件说:

尔康\形式是帮助开发者在创建 和形式维护Web应用程序的组件。

尔康\标签旨在简化HTML标签的建筑, 提供了一组帮助者以动态方式生成HTML。

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

感谢

回答

5

在简单的意思尔康\标签用于设计只有HTML(用户查看)。但对于验证& &将规则添加到您需要使用尔康\表格的形式,我会告诉你尔康\论坛下面

新的窗体类的例子:

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

非常感谢。再一次感谢 - 我发现遵循这个例子是一种更好的学习方法,而不是遵循文档。 – 2014-12-09 10:01:07

0

真的很好的例子,但我正在与闪光消息挣扎。经过快速的谷歌搜索后,我阅读文档后更加困惑。有人说$ this-> flash-> output()应该放置在视图中以查看Flash消息。虽然这会导致错误,我相信这是过去的事情。有人可以告诉我应该放置什么闪光灯方法来查看闪光灯消息或我要去哪里错误?

编辑:好吧,我设法让\ Phalcon \ Flash \ Session工作,我相信这是比直接更适合我的事件。为此,您需要在config/services.php中的依赖注入器中注册Flash服务。我也用引导类来替换类。

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

为了使该工程需要实现引导CSS和JS, 因为数组中只覆盖类的属性里面,你的消息DIV标签,托盘是这样的:'' $二>设置('闪光',函数(){ return new flash(array( 'error'=>'alert alert-danger', 'success'=>'alert alert-success', 'notice'=>'alert alert-info' ”, '警告'=> '警报警报警告' )); });'' – toddsalpen 2016-04-13 17:39:22

0

这取决于你在哪个工作。

如果说,你需要插入大量的数据有很多的验证的,它可以进步过程中改变那么它远不如用“费尔康\表单”

由于他们是非常动态的。

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

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

而对于最可重复使用的,如果你需要,你可以重复使用的形式。

所以如果有较少的数据,那么你可以免费使用的,任何人都更耳根是“费尔康\形式”,它非常有活力和结构。