Урок 4. Работа с формами в Yii2


Давайте начнем создавать формы, чтобы мы могли создавать, обновлять и удалять записи в базе данных. Сначала мы создаем новый контроллер для нашей таблицы заметок, которую мы только что сделали. Итак, мы создаем NotesController.php и мы добавляем в него приведенный ниже код.

<?php

namespace app\controllers;

use yii\web\Controller;
use app\models\Notes;

class NotesController extends Controller
{
    public function actionCreate(){
       $model = new Notes(); // модель созданной нами таблицы
       return $this->render('create',['model'=>$model]); // вьюшка
   }

}
Теперь это маршрут, который мы будем использовать для создания наших заметок. Создайте файл представления по адресу /views/notes/create.php расположение и добавьте содержимое ниже

<?php
    use yii\widgets\ActiveForm;
    use yii\helpers\Html;
 ?>
<?php $form = ActiveForm::begin(['id' => 'contact-form']); ?>

<?= $form->field($model, 'title')
    ->hint("Please enter the tittle")
    ->textInput(['autofocus' => true]) ?>

<?= $form->field($model, 'content')
    ->hint("Enter you note content")
    ->textInput(["autofocus"=>true]) ?>

    <div class="form-group">
        <?= Html::submitButton('Submit', ['class' => 'btn btn-primary', 'name' => 'contact-button']) ?>
    </div>

<?php ActiveForm::end(); ?>
Результат по адресу http://localhost/web/notes/create:



Итак, теперь мы можем создать заметку. Вы можете сделать гораздо больше, чем видели здесь, если почитаете в документации Yii2 о классе ActiveForm.

Создание текстовой области

Вместо textInput для содержимого я буду использовать текстовую область. Поэтому, в view create.php необходимо изменить второе поле, чтобы использовать textArea, а не textInput.

<?= $form->field($model, 'content')
    ->hint("Enter you note content")
    ->textArea(["autofocus"=>true]) ?>
Теперь у нас есть текстовая область.

Отправка формы

Мы можем сохранить данные, которые мы отправили в нашу форму. Давайте посмотрим, как это сделать. В нашем NotesController.php давайте изменим роутинг.

use Yii;

public function actionCreate(){
    $model = new Notes();
    if($model->load(Yii::$app->request->post())){
        $model->save();
    }
    return $this->render('create',['model'=>$model]);
}
Выше мы используем функцию load на модели, чтобы получить значения post из нашей представленной формы. Мы используем Yii::$приложения->запрос->POST, чтобы получить данные $_POST, где. Затем мы сохраняем модель.

Вот и все, наша первая записка была сохранена. Давайте проверим результаты.



Теперь мы можем проверить, сохранила ли база данных наши данные.



Обновление БД с помощью формы

Давайте обновим строку в БД с помощью формы. Сначала давайте создадим маршрут обновления в нашем NotesController.

public function actionUpdate($id){
    $model = Notes::findOne(['id'=>$id]);
    if($model->load(Yii::$app->request->post())){
        $model->update();
    }
    return $this->render('create',['model'=>$model]);
}
Мы используем Notes::findOne, чтобы получить сингулярную модель по первичному ключу. Затем мы загружаем наши данные post и используем функцию $model->update для сохранения любых изменений в наших данных.

Чтобы проверить это, отправляйтесь в http://localhost/web/notes/update?id=1чтобы обновить нашу первую заметку.

Содержимое уже будет загружено для вас, и мы можем изменить значения, если нам это нужно, а затем нажать кнопку Submit, чтобы обновить содержимое.

Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегизаметки, yii2, php, фреймворки, уроки по yii2




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




Рецензия на книгу Симмонс Дэн Лето ночи
Рекурсия папок с помощью C#
Рецепты, кулинария