@dud0ser

Почему не валидируется, да и вообще не работает форма в Yii2?

не понимаю почему не валидируется да и вообще не работает форма....
код модели:
<?php

namespace app\models;

use Yii;
use yii\db\ActiveRecord;
use yii\behaviors\TimestampBehavior;
use yii\db\Expression;

class Order extends ActiveRecord
{
   
    public static function tableName()
    {
        return 'order';
    }

    public function getOrderItems(){
        return $this->hasMany(OrderItems::className(), ['order_id' => 'id']);
    }
    public function getCategory () {
        return $this->hasOne(Category::classname(), ['id' => 'category_id']);
    }

    public function rules()
    {
        return [
            [['name', 'email', 'phone', 'city', 'price', 'text', 'data'], 'required'],
            [['created_at', 'updated_at', 'Category_id', 'company'], 'safe'],
            ['email', 'email'],
            [['status'], 'string'],
            [['price'], 'number'],
            [['name', 'email', 'phone', 'company', 'city', 'text'], 'string', 'max' => 255],
        ];
    }

    public function attributeLabels()
    {
        return [
            'name' => 'Имя',
            'email' => 'E-mail',
            'phone' => 'Телефон',
            'company' => 'Компания',
            'city' => 'Город',
            'price' => 'Бюджет задачи(ГРН)',
            'data' => 'Строки',
            'text' => 'Описание задачи',
        ];
    }
}

вот код контроллера:
<?php

namespace app\controllers;
use app\models\Category;
use app\models\Articles;
use app\models\Order;
use Yii;

class SolutionController extends AppController
{

    public function actionIndex()
    {
        $this->layout = 'page';
        $this->setMeta('Форма для заказа', 'какое-то описание', 'какие-то ключевики');
        
        $order = new Order; 

        $categorys = Category::find()->all();
        if ($order->load(Yii::$app->request->post()) && $order->validate()) {

            echo "good!!!";

            return $this->render('good', compact('order', 'categorys'));
        }
        else {
            return $this->render('solution', compact('order', 'categorys'));
        }
    }
}

ну и представлене (всю вьюху бросать не буду, что бы не захламлять, покажу только форму):
<?php

/* @var $this yii\web\View */
use yii\helpers\Url;
use yii\helpers\html;
use yii\widgets\ActiveForm;
?>
<?php $form = ActiveForm::begin() ?>
<?= $form->field($order, 'name') ?>
    <?= $form->field($order, 'company') ?>
    <?= $form->field($order, 'phone') ?>
    <?= $form->field($order, 'email') ?>
    <?= $form->field($order, 'city') ?>
    <?= $form->field($order, 'price') ?>
    <?= $form->field($order, 'data') ?>
    <?= Html::submitButton('Заказать', ['class' => 'btn btn-success'])?>
<?php ActiveForm::end() ?>

Ведь все же правильно, почему не работает????
  • Вопрос задан
  • 367 просмотров
Решения вопроса 2
@dud0ser Автор вопроса
япросто забыл убрать тег <form>
из верстки
Ответ написан
Комментировать
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Ведь все же правильно, почему не работает????

Значит не всё правильно.
Что именно не работает? Сохранение, валидация? Гадать на картах предлагаете?
Если сохранение, то замените на это
if ($order->load(Yii::$app->request->post()) && $order->save())
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@BorisKorobkov
Web developer
Перед solution добавьте типа
echo implode(' ', $order->getFirstErrors());

P.S. "categories", а не "categorys"
Ответ написан
Комментировать
@davidnum95
Order у вас не форма, а модель бд. Нужно создать класс OrderForm унаследованный от Model, и уже в него загружать отправленные данные. Соответственно в форме создаете модель бд, записываете поля и сохраняете.
И не
Yii::$app->request->post()
а
Yii::$app->request->bodyParams
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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