Widget ActiveForm - uniqcle/Yii2 GitHub Wiki

Во вью добавляем ActiveForm frontend/views/employee/register.php

use yii\widgets\ActiveForm;
use yii\helpers\Html;

//Если есть ошибки
if( $model->hasErrors() ){

//Если валидация не прошла. В модель записываются ошибки валидации
//Эти ошибки можно вызвать методом getErrors() это массив
$errors = $model->getErrors(); 

foreach($errors as $error):
  foreach($error as $item):
    echo $item.'</br>'; 
  endforeach; 
endforeach; 
}
?>

<h3>Register employee</h3>

<?php $form = ActiveForm::begin([
        'options'=>[
            'id' => 'testForm', 
            'class'=>'form-horizontal']
        ]); 
); ?>

    <?php echo $form->field($model, 'firstName'); ?>

    <?php echo $form->field($model, 'lastName'); ?>

    <?php echo $form->field($model, 'middleName')->passwordInput(); ?>

    <?php echo $form->field($model, 'email'); ?>

    <?php echo $form->field($model, 'salary')->hint('Подсказка...'); ?>

    <?php echo $form->field($model, 'bday'); ?>

    <?php echo $form->field($model, 'startday'); ?>

    <?php echo $form->field($model, 'position'); ?>

    <?php echo $form->field($model, 'city')->dropDownList($cities); ?>

    <?php echo $form->field($model, 'idcode'); ?>

    <?php echo Html::submitButton('Отправить', ['class' => 'btn btn-primary']); ?>

<?php ActiveForm::end(); ?>

В контроллере frontend/controllers/EmployeeController.php загружаем данные в модель

namespace frontend\controllers; 

use Yii; 
use yii\web\Controller; 
use frontend\models\Employee;
use frontend\models\City;

class EmployeeController extends Controller 
{

    public function actionRegister(){

		$model = new Employee();
        //Получаем данные городов
		$cities = City::getCities();

		$model->scenario = Employee::SCENARIO_EMPLOYEE_REGISTER; 

		$formData = Yii::$app->request->post();

		
		if( Yii::$app->request->isPost ){

		//Безопасное массовое присваивание. Согласно сценариям
                //1. Вариант
		//$model->attributes = $formData['Employee'];

               //2. Вариант
               $model->load( $formData );

			if( $model->validate() && $model->register() ){

				Yii::$app->session->setFlash('success', 'Вы успешно зарегестрированы');				

			}  
		}

		return $this->render('register', [
			'model' => $model,
                        'cities' => $cities
		]);
	}
}

По модели проходит валидация frontend/models/Employee.php

namespace frontend\models; 

use Yii; 
use yii\base\Model; 

class Employee extends Model 
{	
	//Имя сценариев - их лучше поместить в константы
	const SCENARIO_EMPLOYEE_REGISTER = 'employee_register'; 
	const SCENARIO_EMPLOYEE_UPDATE =   'employee_update'; 

	public $firstName; 
	public $lastName; 
	public $middleName; 
	public $salary; 
	public $email; 
	public $bday; 
	public $startday; 
	public $city; 
	public $position; 
	public $idcode; 

	//Возвращает массив, в котором перечислены сценарии и атрибуты, которые в них используются
	public function scenarios(){

		return [
			self::SCENARIO_EMPLOYEE_REGISTER => ['firstName', 'lastName', 'middleName', 'salary', 'email', 'bday', 'startday', 'city', 'position', 'idcode'], 
			self::SCENARIO_EMPLOYEE_UPDATE => ['firstName', 'lastName', 'middleName', 'salary']
		]; 
	}

	public function rules(){

		return [
			[['email'], 'email'], 
			[['firstName', 'lastName', 'salary', 'email', 'startday', 'position', 'idcode'], 'required'],
			['firstName', 'string', 'min' => 2], 
			[['lastName', 'middleName'], 'string', 'min' => 3], 
			[['salary'], 'number', 'min' => 20000, 'max' => 100000], 
			[['bday', 'startday'], 'date', 'format' => 'php:Y-m-d'],
			['middleName', 'required', 'on' => self::SCENARIO_EMPLOYEE_UPDATE]
		]; 
	}

	public function register(){

		$sql = "INSERT INTO employee (id, firstName, lastName, middleName, salary, email, bday, startday, city, position, idcode ) VALUES (null, '{$this->firstName}', '{$this->lastName}', '{$this->middleName}', '{$this->salary}', '{$this->email}', '{$this->bday}', '{$this->startday}', '{$this->city}', '{$this->position}', '{$this->idcode}'); ";

		return Yii::$app->db->createCommand($sql)->execute(); 
	}
}

Получаем данные о городах из модели frontend/models/City.php

namespace frontend\models;

use Yii;
use yii\helpers\ArrayHelper;
use yii\base\Model;

class City extends Model
{
    public static function getCities(){
        $sql = "SELECT * FROM cities; ";

        $result = Yii::$app->db->createCommand( $sql )->queryAll();

        return ArrayHelper::map( $result , 'id', 'city');
    }
}
⚠️ **GitHub.com Fallback** ⚠️