Страница 1 из 1
Не сохраняется дата.
Добавлено: 2019.08.29, 06:39
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);
}
Нынешния дата подставляется и сохраняется ,но только после лишних телодвижений, то есть,-
надо нажать:сохранить, затем обновить, затем снова нажать сохранить.
В чём может быть причина ?
Re: Не сохраняется дата.
Добавлено: 2019.08.29, 09:22
Loveorigami
getDate и аттрибут date.
Кроме того, для этих целей из коробки есть
https://www.yiiframework.com/doc/api/2. ... mpbehavior
Re: Не сохраняется дата.
Добавлено: 2019.08.29, 14:33
rosswe
Loveorigami писал(а): ↑2019.08.29, 09:22
getDate и аттрибут date.
А что не так с getDate и атрибут date?
Re: Не сохраняется дата.
Добавлено: 2019.08.29, 14:36
ElisDN
rosswe писал(а): ↑2019.08.29, 14:33
А что не так с getDate и атрибут date?
Геттер перебивает атрибут. Переименуйте в getFormattedDate().
Re: Не сохраняется дата.
Добавлено: 2019.08.29, 14:43
yiiliveext
ElisDN писал(а): ↑2019.08.29, 14:36
rosswe писал(а): ↑2019.08.29, 14:33
А что не так с getDate и атрибут date?
Геттер перебивает атрибут. Переименуйте в getFormattedDate().
В ActiveRecord атрибуты имеют приоритет над геттерами.
Re: Не сохраняется дата.
Добавлено: 2019.08.29, 18:48
rosswe
Переименовал в getFormattedDate().
В namespace добавил use yii\i18n\Formatter; - он не высвечивается
установлен пакет php7.2-intl самой новой версии
Получаю ошибку
Вызов неизвестного метода:
Re: Не сохраняется дата.
Добавлено: 2019.08.30, 07:18
yiiliveext
Покажите код вьюхт, там где дата выводится и контроллера
Re: Не сохраняется дата.
Добавлено: 2019.08.30, 11:43
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]);
}
Re: Не сохраняется дата.
Добавлено: 2019.08.30, 15:14
yiiliveext
Если поменяли наименование метода, то и во вьюхе меняйте
Action не тот
Re: Не сохраняется дата.
Добавлено: 2019.08.30, 16:17
rosswe
Во всех вьюшках поменял на <span class="p-date"><?= $article->getFormattedDate();?>></span>
всё по-прежнему,- также только после второго круга ставит нынешнюю дату.
http://joxi.ru/82QZ3zLIwgZqGA
http://joxi.ru/Q2K5dM1uLR0aZr
Re: Не сохраняется дата.
Добавлено: 2019.08.30, 16:26
yiiliveext
rosswe писал(а): ↑2019.08.30, 16:17
Во всех вьюшках поменял на <span class="p-date"><?= $article->getFormattedDate();?>></span>
всё по-прежнему,- также только после второго круга ставит нынешнюю дату.
http://joxi.ru/Q2K5dM1uLR0aZr
Потому что дело было не в этом, это сразу было понятно. Покажите контроллер и представление, в которых вы сохраняете дату. А вообще лучше используйте TimestampBehavior как вам советовали.
Re: Не сохраняется дата.
Добавлено: 2019.08.30, 17:18
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.');
}
}
}
Re: Не сохраняется дата.
Добавлено: 2019.08.30, 18:51
yiiliveext
И метод модели saveArticle() для полноты картины.
Re: Не сохраняется дата.
Добавлено: 2019.08.30, 19:14
rosswe
Код: Выделить всё
public function saveArticle()
{
$this->user_id = Yii::$app->user->id;
return $this->save(false);
}
Re: Не сохраняется дата.
Добавлено: 2019.08.30, 20:28
rosswe
Есть ещё один гитер, где есть связь между article и date ,но здесь статус статьи зависит от даты.
Код: Выделить всё
public static function getRecent()
{
return Article::find()->orderBy('date asc')->limit(5)->all();
}
Re: Не сохраняется дата.
Добавлено: 2019.08.31, 10:12
yiiliveext
rosswe писал(а): ↑2019.08.30, 19:14
Код: Выделить всё
public function saveArticle()
{
$this->user_id = Yii::$app->user->id;
return $this->save(false);
}
Здесь собака порылась
save(false) сохраняет без валидации, соответственно и правила не отрабатывают.
Re: Не сохраняется дата.
Добавлено: 2019.08.31, 13:03
rosswe
Да именно в этом было дело, сейчас работает корректно.
Спасибо.