Yii2 форми

24

Від автора: вітаю вас, друзі. Ми продовжуємо цикл статей, присвячених знайомству з фреймворком Yii2. Цю статтю ми присвятимо темі Yii2 форми. Ми дізнаємося про те, як відбувається створення форм, що таке модель форми, і як відбувається ajax відправка форми. Почнемо.

Отже, перед нами стоїть стандартна задача — прийняти дані від користувача. Зазвичай для цього використовуються форми і метод передачі даних POST. Що нам буде потрібно для створення форми? По-перше, нам необхідна модель форми. Далі, потрібно action, який буде відповідати за одержання даних. Ну і, звичайно ж, нам необхідний як мінімум один вид, в якому і буде виведена форма.

Почнемо з створення моделі. У папці моделей створимо клас TestForm.

namespace app\models;
use yii\base\Model;
class TestForm extends Model
{
}

Yii2 форми

Модель успадковує клас yii\base\Model, саме він, як правило, використовується для роботи з формами. У моделі ми повинні оголосити публічні властивості, які відповідають полям форми. Наприклад, нехай це буде форма з полями для введення імені та email. Відповідно, оголосимо обидва публічних властивості:

class TestForm extends Model
{
public $name;
public $email;
}

Поки що відкладемо модель і створимо action для роботи зі сторінкою форми і даних з неї. Я скористаюся створеним раніше контролером TestController і його дією actionPage. У цьому дії створимо екземпляр моделі і передамо його подання.

namespace app\controllers;
use yii\web\Controller;
use app\models\TestForm;
class TestController extends Controller
{
public function actionIndex()
{
return $this->render(‘index’);
}
public function actionPage()
{
$form_model = new TestForm();
return $this->render(‘page’, compact(‘form_model’));
}
}

Yii2 форми

Залишилося у вигляді \views\test\page.php промалювати форму. Для цього ми скористаємося можливостями віджета yii\widgets\ActiveForm і хэлпером yii\helpers\Html.

field($form_model, ‘name’) ?>
field($form_model, ’email’) ?>
‘btn btn-success’]) ?>

Тепер звернемося до потрібної нам сторінки, вказавши ім’я контролера і дії: http://yii2/index.php?r=test/page. У результаті ми повинні побачити нашу форму.

Yii2 форми

Відмінно! Півсправи зроблено. Тепер завдання полягає в тому, щоб прийняти дані з форми. За замовчуванням вона буде відправлена в це ж дію, тобто TestController::actionPage — там і спробуємо прийняти дані. Для отримання даних методом POST ми скористаємося методом post() класу yii\web\Request. Спробуємо завантажити отримані дані в модель з допомогою методу load() в дії. Для цього трохи змінимо код дії:

public function actionPage()
{
$form_model = new TestForm();
if($form_model->load(\Yii::$app->request->post())){
var_dump(\Yii::$app->request->post());
var_dump($form_model);
}
return $this->render(‘page’, compact(‘form_model’));
}

Тут ми намагаємося завантажити дані в модель і потім роздрукувати її. Також ми додатково роздруковуємо самі дані з масиву $_POST. Давайте спробуємо відправити тестові дані і поглянемо на те, що буде надруковано.

Yii2 форми

В результаті ми побачили, що дані приходять, але ось модель чому ними не заповнюється, властивості name та email моделі виявляються порожніми. Все правильно. Справа в тому, що в модель можуть бути завантажені тільки перевірені дані, які пройшли валідацію. Для цього в моделі нам потрібно створити масив правил валідації. Про це ми і поговоримо в наступній статті. Ну а на цьому ми поки що зупинимося.

Більше про фреймворку ви можете дізнатися з наших безкоштовних або платних уроків. Також створення найпростішого блогу на Yii2 можна подивитися в цьому циклі уроків.