Phalcon использует Phalcon\Tag ИЛИ Phalcon\Forms для создания форм

Я искал вверх и вниз, но не смог найти, какой из них лучше Phalcon \ Tag ИЛИ Phalcon \ Forms для создания форм.

Оба класса имеют функциональные возможности для создания элементов формы. Но я обнаружил, что в Phalcon \ Tag есть несколько полезных тегов, например Phalcon\Tag::emailField() или Phalcon\Tag::dateField(array())

Документация Phalcon гласит:

"Phalcon \ Forms - это компонент, который помогает разработчику создавать и поддерживать формы в веб-приложениях".

"Phalcon \ Tag разработан для упрощения построения HTML-тегов. Он предоставляет набор помощников для динамического генерирования HTML".

Кто-нибудь может мне помочь с плюсами и минусами использования обоих методов.

Спасибо

3 ответа

В простом смысле Phalcon\Tag используются для разработки только HTML (просмотр пользователями). но для проверки && добавления правил в форму вам нужно использовать phalcon\forms, я покажу вам пример phalcon\forums ниже

НОВАЯ ФОРМА КЛАССА:

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>

Это зависит от того, над чем вы работаете.

Если мы говорим, что вам нужно вставить много данных с большим количеством проверок, и они могут измениться во время выполнения, тогда гораздо лучше использовать "Phalcon\Forms"

Как они очень динамичны.

Означает, что вы можете изменить текстовое поле с помощью поля выбора очень легко, не касаясь шаблона.

Вы можете добавить проверки, не беспокоясь о шаблоне и других вещах.

И для многоразового использования вы можете повторно использовать форму, если вам нужно.

так что если данных меньше, вы можете использовать любой из них, но более внушительным является "Phalcon\Forms", очень динамичный и структурный.

В общем, отличный пример, но я борюсь со вспышкой. После быстрого поиска в Google я был более смущен после прочтения документации. Некоторые говорят, что $this->flash->output() должен быть размещен в представлении, чтобы видеть флеш-сообщения. Хотя это вызывает ошибки, и я верю, что это что-то из прошлого. Может кто-нибудь сказать мне, какой метод флэш-памяти я должен установить для просмотра, чтобы увидеть флэш-сообщения или Где я иду не так?

РЕДАКТИРОВАТЬ: Ну, мне удалось заставить \Phalcon\Flash\Session работать, и я считаю, что это событие больше подходит для меня, чем Direct. Для этого вам необходимо зарегистрировать флеш сервис в Dependency Injector в config/services.php. Я также заменяю классы на классы начальной загрузки.

$di->set('flash', function() {
    return new Phalcon\Flash\Session(array(
        'error'=>'text-danger',
        'warning'=>'text-warning',
        'notice'=>'text-info',
        'success'=>'text-success'                
    ));
});
Другие вопросы по тегам