Не сохраняется дата.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
rosswe
Сообщения: 94
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Не сохраняется дата.

Сообщение rosswe »

Доброго времени.
Данный код, должен подставлять нынешнюю дату, если в поле даты не были внесены данные.

Код: Выделить всё

public function rules()
    {
        return [
            [['title'], 'required'],
            [['title', 'description', 'content',], 'string'],
          // [['date'], 'required'],
            [['date'], 'date', 'format' => 'php:Y-m-d'],
            [['date'], "default", 'value' => date('Y-m-d')],
            [['title'], 'string', 'max' => 255]
        ];
    }

 public function getDate()
    {
        return Yii::$app->formatter->asDate($this->date);
    }
Нынешния дата подставляется и сохраняется ,но только после лишних телодвижений, то есть,-
надо нажать:сохранить, затем обновить, затем снова нажать сохранить.

В чём может быть причина ?

Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: Не сохраняется дата.

Сообщение Loveorigami »

getDate и аттрибут date.

Кроме того, для этих целей из коробки есть https://www.yiiframework.com/doc/api/2. ... mpbehavior

rosswe
Сообщения: 94
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Не сохраняется дата.

Сообщение rosswe »

Loveorigami писал(а):
2019.08.29, 09:22
getDate и аттрибут date.
А что не так с getDate и атрибут date?

Аватара пользователя
ElisDN
Сообщения: 5562
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Не сохраняется дата.

Сообщение ElisDN »

rosswe писал(а):
2019.08.29, 14:33
А что не так с getDate и атрибут date?
Геттер перебивает атрибут. Переименуйте в getFormattedDate().

yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Не сохраняется дата.

Сообщение yiiliveext »

ElisDN писал(а):
2019.08.29, 14:36
rosswe писал(а):
2019.08.29, 14:33
А что не так с getDate и атрибут date?
Геттер перебивает атрибут. Переименуйте в getFormattedDate().
В ActiveRecord атрибуты имеют приоритет над геттерами.

rosswe
Сообщения: 94
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Не сохраняется дата.

Сообщение rosswe »

Переименовал в getFormattedDate().

В namespace добавил use yii\i18n\Formatter; - он не высвечивается
установлен пакет php7.2-intl самой новой версии

Получаю ошибку
Вызов неизвестного метода:

yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Не сохраняется дата.

Сообщение yiiliveext »

Покажите код вьюхт, там где дата выводится и контроллера

rosswe
Сообщения: 94
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Не сохраняется дата.

Сообщение rosswe »

Код: Выделить всё

public function actionSetImage($id)

{
$model = new ImageUpload;

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

{
$article = $this->findModel($id);

$file = UploadedFile::getInstance($model, 'image');

if ($article->saveImage($model->uploadFile($file, $article->image)))

{
return $this->redirect(['view', 'id'=>$article->id]);

}

}

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

Код: Выделить всё

<?= $article->getDate();?>

yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Не сохраняется дата.

Сообщение yiiliveext »

Если поменяли наименование метода, то и во вьюхе меняйте

Код: Выделить всё

<?= $article->getFormattedDate();?>
Action не тот

rosswe
Сообщения: 94
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Не сохраняется дата.

Сообщение rosswe »

Во всех вьюшках поменял на <span class="p-date"><?= $article->getFormattedDate();?>></span>
всё по-прежнему,- также только после второго круга ставит нынешнюю дату.
http://joxi.ru/82QZ3zLIwgZqGA
http://joxi.ru/Q2K5dM1uLR0aZr

yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Не сохраняется дата.

Сообщение yiiliveext »

rosswe писал(а):
2019.08.30, 16:17
Во всех вьюшках поменял на <span class="p-date"><?= $article->getFormattedDate();?>></span>
всё по-прежнему,- также только после второго круга ставит нынешнюю дату.
http://joxi.ru/Q2K5dM1uLR0aZr
Потому что дело было не в этом, это сразу было понятно. Покажите контроллер и представление, в которых вы сохраняете дату. А вообще лучше используйте TimestampBehavior как вам советовали.

rosswe
Сообщения: 94
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Не сохраняется дата.

Сообщение rosswe »

Код: Выделить всё

<?php

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

?>

<div class="article-form">

    <?php $form = ActiveForm::begin(); ?>

    <?= $form->field($model, 'title')->textInput(['maxlength' => true]) ?>

    <?= $form->field($model, 'description')->textarea(['rows' => 6]) ?>

    <?= $form->field($model, 'content')->textarea(['rows' => 6]) ?>

    <?= $form->field($model, 'date')->textInput() ?>

    <div class="form-group">
        <?= Html::submitButton('Сохранить', ['class' => 'btn btn-success']) ?>
    </div>

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

</div>

Код: Выделить всё

<?php

namespace app\modules\admin\controllers;

use ...


class ArticleController extends Controller
{
    /**
     * {@inheritdoc}
     */
    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),//
                'actions' => [
                    'delete' => ['POST'],
                ],
            ],
        ];
    }


    public function actionIndex()
    {
        $searchModel = new ArticleSearch();
        $dataProvider = $searchModel->search(Yii::$app->request->queryParams);

        return $this->render('index', [
            'searchModel' => $searchModel,
            'dataProvider' => $dataProvider,
        ]);
    }

    public function actionCreate()
    {
        $model = new Article();

        if ($model->load(Yii::$app->request->post()) && $model->saveArticle()) {

         //   var_dump(Yii::$app->request->post()); die;
         //   var_dump($model->attributes);die;

            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }


    public function actionView($id)
    {
        return $this->render('view', [
            'model' => $this->findModel($id),
        ]);
    }

    protected function findModel($id)
    {
        if (($model = Article::findOne($id)) !== null) {

            return $model;
        } else {

            throw new NotFoundHttpExceptionAlias('The requested page does not exist.');
        }

    }

 
}

yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Не сохраняется дата.

Сообщение yiiliveext »

И метод модели saveArticle() для полноты картины.

rosswe
Сообщения: 94
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Не сохраняется дата.

Сообщение rosswe »

Код: Выделить всё

public function saveArticle()
    {
        $this->user_id = Yii::$app->user->id;
        return $this->save(false);
    }

rosswe
Сообщения: 94
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Не сохраняется дата.

Сообщение rosswe »

Есть ещё один гитер, где есть связь между article и date ,но здесь статус статьи зависит от даты.

Код: Выделить всё

 public static function getRecent()
    {
        return Article::find()->orderBy('date asc')->limit(5)->all();
    }

yiiliveext
Сообщения: 910
Зарегистрирован: 2019.08.13, 01:49

Re: Не сохраняется дата.

Сообщение yiiliveext »

rosswe писал(а):
2019.08.30, 19:14

Код: Выделить всё

public function saveArticle()
    {
        $this->user_id = Yii::$app->user->id;
        return $this->save(false);
    }
Здесь собака порылась

Код: Выделить всё

return $this->save(false);

save(false) сохраняет без валидации, соответственно и правила не отрабатывают.

rosswe
Сообщения: 94
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Не сохраняется дата.

Сообщение rosswe »

Да именно в этом было дело, сейчас работает корректно.
Спасибо.

Ответить