За последние 24 часа нас посетили 57360 программистов и 1809 роботов. Сейчас ищут 1028 программистов ...

CRUD из мануала

Тема в разделе "Yii", создана пользователем Dimon2x, 17 фев 2018.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    Почему, при создании cruda, с помощью генератора, не работает редактирование и добавление, а удаление работает?
     
  2. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Почему не работает? Обычно всё в порядке, он же для этого сделан.
     
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.211
    Симпатии:
    186
    PHP:
    1.  public function actionCreate()
    2.     {
    3.         $model = new Country();
    4.  
    5.         if ($model->load(Yii::$app->request->post()) && $model->save()) {
    6.             return $this->redirect(['view', 'id' => $model->code]);
    7.         }
    8.  
    9.         return $this->render('create', [
    10.             'model' => $model,
    11.         ]);
    12.     }
    --- Добавлено ---
    PHP:
    1. <?php
    2.  
    3. namespace app\models;
    4.  
    5. use yii\db\ActiveRecord;
    6.  
    7. class Country extends ActiveRecord
    8. {
    9.       public static function tableName()
    10.     {
    11.         return 'country';
    12.     }
    13. }
    --- Добавлено ---
    При добавлении пишет ошибку Отсутствуют обязательные параметры: id

    Код (Text):
    1. -- phpMyAdmin SQL Dump
    2. -- version 4.3.11
    3. -- http://www.phpmyadmin.net
    4. --
    5. -- Хост: 127.0.0.1
    6. -- Время создания: Фев 17 2018 г., 12:20
    7. -- Версия сервера: 5.6.24
    8. -- Версия PHP: 5.6.8
    9.  
    10. SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
    11. SET time_zone = "+00:00";
    12.  
    13.  
    14. /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    15. /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    16. /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    17. /*!40101 SET NAMES utf8 */;
    18.  
    19. --
    20. -- База данных: `yii2`
    21. --
    22.  
    23. -- --------------------------------------------------------
    24.  
    25. --
    26. -- Структура таблицы `country`
    27. --
    28.  
    29. CREATE TABLE IF NOT EXISTS `country` (
    30.   `code` char(2) NOT NULL,
    31.   `name` char(52) NOT NULL,
    32.   `population` int(11) NOT NULL DEFAULT '0'
    33. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
    34.  
    35. --
    36. -- Дамп данных таблицы `country`
    37. --
    38.  
    39. INSERT INTO `country` (`code`, `name`, `population`) VALUES
    40. ('AU', 'Australia', 24016400),
    41. ('BR', 'Brazil', 205722000),
    42. ('CA', 'Canada', 35985751),
    43. ('CN', 'China', 1375210000),
    44. ('DE', 'Germany', 81459000),
    45. ('FR', 'France', 64513242),
    46. ('GB', 'United Kingdom', 65097000),
    47. ('IN', 'India', 1285400000),
    48. ('RU', 'Russia', 146519759);
    49.  
    50. --
    51. -- Индексы сохранённых таблиц
    52. --
    53.  
    54. --
    55. -- Индексы таблицы `country`
    56. --
    57. ALTER TABLE `country`
    58.   ADD PRIMARY KEY (`code`);
    59.  
    60. /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
    61. /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
    62. /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
    --- Добавлено ---
    Я разобрался, это потому что не было правил

    PHP:
    1. public function rules()
    2.     {
    3.         return [
    4.             [['code', 'name'], 'required'],
    5.             [['population'], 'integer'],
    6.             [['code'], 'string', 'max' => 2],
    7.             [['name'], 'string', 'max' => 52],
    8.             [['code'], 'unique'],
    9.         ];
    10.     }
    --- Добавлено ---
    Не понимаю, а почему без правил не работает?
    --- Добавлено ---
    это потому что метод save, должен принимать первым аргументов эти правила?
     
    SpikePHP и denis01 нравится это.
  4. avs123

    avs123 Новичок

    С нами с:
    21 фев 2018
    Сообщения:
    5
    Симпатии:
    1
    А ошибку Отсутствуют обязательные параметры: id выдает в url /country/view&id ...?
    Если да -
    проблема состоит не в сохранении, а в перенаправлении (переменной id не присвоилось значение)

    Правила нужны т.как у вас перенаправляет на указываемое поле code
    CRUD -генератор по умолчанию генерирует действия(view , delete с параметром id - числовое поле с автоинкрементом)
    Вам можно было в качестве ПК использовать числовое поле id с автоинкрементом(для такого поля можно не прописывать правила валидации т.как для такого поля действия прописаны по умолчанию в фреймворке)
    Если у вас другой тип данных для ПК таблицы или вы ПК назвали по другому - обязательно пропишите правила валидации т.как фреймворк восприимет как неизестное свойство(Unknown property : code)

    Пример из моего проекта - я использовал поле id с автоинкрементом( в даном случае для ПК(ключа) не нужно прописывать правила валидации и все работает сразу)


    PHP:
    1. public function rules()
    2.     {
    3.         return [
    4.             [['parent_id'], 'integer'],
    5.             [['title'], 'required'],
    6.             [['title'], 'string', 'max' => 30],
    7.             [['descrition',], 'string', 'max' => 255],
    8.             [['parent_id'], 'exist', 'skipOnError' => true, 'targetClass' => Category::className(), 'targetAttribute' => ['parent_id' => 'id']],
    9.         ];
    10.     }
     
    Dimon2x нравится это.