Почему, при создании cruda, с помощью генератора, не работает редактирование и добавление, а удаление работает?
PHP: public function actionCreate() { $model = new Country(); if ($model->load(Yii::$app->request->post()) && $model->save()) { return $this->redirect(['view', 'id' => $model->code]); } return $this->render('create', [ 'model' => $model, ]); } --- Добавлено --- PHP: <?php namespace app\models; use yii\db\ActiveRecord; class Country extends ActiveRecord { public static function tableName() { return 'country'; } } --- Добавлено --- При добавлении пишет ошибку Отсутствуют обязательные параметры: id Код (Text): -- phpMyAdmin SQL Dump -- version 4.3.11 -- http://www.phpmyadmin.net -- -- Хост: 127.0.0.1 -- Время создания: Фев 17 2018 г., 12:20 -- Версия сервера: 5.6.24 -- Версия PHP: 5.6.8 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- База данных: `yii2` -- -- -------------------------------------------------------- -- -- Структура таблицы `country` -- CREATE TABLE IF NOT EXISTS `country` ( `code` char(2) NOT NULL, `name` char(52) NOT NULL, `population` int(11) NOT NULL DEFAULT '0' ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- -- Дамп данных таблицы `country` -- INSERT INTO `country` (`code`, `name`, `population`) VALUES ('AU', 'Australia', 24016400), ('BR', 'Brazil', 205722000), ('CA', 'Canada', 35985751), ('CN', 'China', 1375210000), ('DE', 'Germany', 81459000), ('FR', 'France', 64513242), ('GB', 'United Kingdom', 65097000), ('IN', 'India', 1285400000), ('RU', 'Russia', 146519759); -- -- Индексы сохранённых таблиц -- -- -- Индексы таблицы `country` -- ALTER TABLE `country` ADD PRIMARY KEY (`code`); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; --- Добавлено --- Я разобрался, это потому что не было правил PHP: public function rules() { return [ [['code', 'name'], 'required'], [['population'], 'integer'], [['code'], 'string', 'max' => 2], [['name'], 'string', 'max' => 52], [['code'], 'unique'], ]; } --- Добавлено --- Не понимаю, а почему без правил не работает? --- Добавлено --- это потому что метод save, должен принимать первым аргументов эти правила?
А ошибку Отсутствуют обязательные параметры: id выдает в url /country/view&id ...? Если да - проблема состоит не в сохранении, а в перенаправлении (переменной id не присвоилось значение) Правила нужны т.как у вас перенаправляет на указываемое поле code CRUD -генератор по умолчанию генерирует действия(view , delete с параметром id - числовое поле с автоинкрементом) Вам можно было в качестве ПК использовать числовое поле id с автоинкрементом(для такого поля можно не прописывать правила валидации т.как для такого поля действия прописаны по умолчанию в фреймворке) Если у вас другой тип данных для ПК таблицы или вы ПК назвали по другому - обязательно пропишите правила валидации т.как фреймворк восприимет как неизестное свойство(Unknown property : code) Пример из моего проекта - я использовал поле id с автоинкрементом( в даном случае для ПК(ключа) не нужно прописывать правила валидации и все работает сразу) PHP: public function rules() { return [ [['parent_id'], 'integer'], [['title'], 'required'], [['title'], 'string', 'max' => 30], [['descrition',], 'string', 'max' => 255], [['parent_id'], 'exist', 'skipOnError' => true, 'targetClass' => Category::className(), 'targetAttribute' => ['parent_id' => 'id']], ]; }