Задать вопрос
AndreyDevWork
@AndreyDevWork

Почему не работает POST изи postman в yii2?

В базу ничего не записывается

<?php
<?php
namespace app\controllers;

use app\models\CategoryForm;
use Yii;

class SiteController extends \yii\web\Controller
{
    public function actionIndex()
    {
        $categoryForm = new CategoryForm();
        if($categoryForm->load(Yii::$app->request->post()) && $categoryForm->save()) {
            Yii::$app->session->setFlash('success', 'Операция выполнена успешно!');
            return $this->redirect('/');
        }


        return $this->render('index');
    }

}


<?php

namespace app\models;

use Yii;

/**
 * This is the model class for table "category".
 *
 * @property int $id
 * @property string $title
 * @property string|null $description
 * @property string|null $preview
 * @property int|null $parent_id
 * @property string|null $created_at
 * @property string|null $updated_at
 * @property int|null $is_active
 */
class CategoryForm extends \yii\db\ActiveRecord
{


    public static function tableName()
    {
        return 'category';
    }

    public function rules()
    {
        return [
            [['title'], 'required'],
            [['description'], 'string'],
            [['parent_id', 'is_active'], 'integer'],
            [['created_at', 'updated_at'], 'safe'],
            [['title', 'preview'], 'string', 'max' => 255],
        ];
    }

    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'title' => 'Название',
            'description' => 'Описание',
            'preview' => 'Изображение',
            'parent_id' => 'Parent ID',
            'created_at' => 'Created At',
            'updated_at' => 'Updated At',
            'is_active' => 'Активность',
        ];
    }
}


6543d01fc161f644348428.png
  • Вопрос задан
  • 64 просмотра
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 3
kawabanga
@kawabanga
1) Постман вроде как не умеет в сессии. Т.е. толка от этой строки нет -
Yii::$app->session->setFlash('success', 'Операция выполнена успешно!');


2) У вас отправка raw данных в постамане через json, а в контроллере вы пытаетесь получить POST.
В постмане надо переключить на form-data .
Ответ написан
Комментировать
@FernandoErrNando
Скорее всего, у вас где-то не прошло сохранение из-за ошибки валидации: поле parent_id у вас в модели integer, а передаете в теле запроса строку, но не факт, что единственная ошибка. Проблема в том, что вы не видите ошибки, потому что не проверяете данные, которые пришли к вам. Также непонятно, что у вас все-таки - HTML-форма или АПИ-эндпоинт. В первом случае код должен выглядеть как-то так
$model = new СategoryForm();

        if (Yii::$app->request->isPost) {
            $model->load(Yii::$app->request->post());
            if ($model->validate()) {
                if ($model->save())) {
                    return $this->redirect(['index]);
                }
            }
        }

        return $this->render('create', [
            'model' => $model,
        ]);

, а во втором как-то так
public function actionCreate()
    {
        $categoryForm = new CategoryForm();
        $categoryForm->load(Yii::$app->request->post(), '');
        if (!$categoryForm->validate()) {
            Yii::$app->response->setStatusCode(400);
            return $categoryForm->errors;
        }
        try {
            if (!$categoryForm->save()) {
                throw new BadRequestHttpException(Yii::t('app', 'Категория не добавлена'));
            }
            
        } catch (\Throwable $e) {
            throw new BadRequestHttpException($e->getMessage());
        }

        return ;
    }
Ответ написан
Комментировать
@pantsarny
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы