Это не баг в Yii?

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

Это не баг в Yii?

Сообщение rosswe »

привет
Пытался перенаправить запрос в б\д ,если расскоментровать line-a
выдаёт Getting unknown property: app\models\Comment::profile

вот код

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

public function saveComment($article_id)
    {
        $comment = new Comment;
        $comment->text = $this->comment;
        $comment->user_id = Yii::$app->user->id;
        $comment->article_id = $article_id;
        $comment->status = 1; //подтверждение коммента 0
        $comment->user->photo;
    //  $comment->profile->avatar();        -line-a
        $comment->date = date('Y-m-d'); - line-b
   
    return $comment->save();
 
    }

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

 <div class="comment-img">
                <img width="100" class="img-circle" src="<?//= $comment->profile->avatar; ?>" alt="">   - line-a
                <img width="100" class="img-circle" src="<?= $comment->user->photo; ?>" alt="">  -line-b
                
                
если оставить line-b то всё работает нормально но с другой таблицей ! Это не баг в Юии?
DDR5
Сообщения: 7
Зарегистрирован: 2019.01.09, 14:20

Re: Это не баг в Yii?

Сообщение DDR5 »

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

Re: Это не баг в Yii?

Сообщение rosswe »

Да конечно существует таблица profile и столбец avatar -от неё загрузка файлов img для профиля работает.
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Это не баг в Yii?

Сообщение rosswe »

DDR5 писал(а): 2019.01.10, 11:17 profile существующая реляция?
просто мне нужно перенаправить ,чтоб как в профиль так и в комменты.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Это не баг в Yii?

Сообщение andku83 »

->avatar() - обращение не к полю, а к функции.
Возможно профайл можно получить через user:

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

$comment->user->profile->avatar = 'value';
Для более точных ответов нужно знать вашу структуру таблиц и сами классы.
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Это не баг в Yii?

Сообщение rosswe »

поменял на

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

    public function saveComment($article_id)
    {
        $comment = new Comment;
        $comment->text = $this->comment;
        $comment->user_id = Yii::$app->user->id;
        $comment->article_id = $article_id;
        $comment->status = 1; //подтверждение коммента 0-ожидание
       // $comment->user->photo;
        $comment->user->profile->avatar = 'value';
    // $comment->profile->avatar;
        $comment->date = date('Y-m-d');


        return $comment->save();

    }
во вьюшки тоже поменял..
выдаёт следушие:

Indirect modification of overloaded property app\models\User::$profile has no effect

вот стек
https://pastebin.com/ARGCmN3w
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Это не баг в Yii?

Сообщение andku83 »

andku83 писал(а): 2019.01.10, 13:34 Для более точных ответов нужно знать вашу структуру таблиц и сами классы.
stackTrace никак не описывает вашего кода
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Это не баг в Yii?

Сообщение rosswe »

andku83 писал(а): 2019.01.10, 19:58
andku83 писал(а): 2019.01.10, 13:34 Для более точных ответов нужно знать вашу структуру таблиц и сами классы.
stackTrace никак не описывает вашего кода
вот структура таблиц https://pastebin.com/10irWxNr
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Это не баг в Yii?

Сообщение rosswe »

вот класс модели ..

<?php

namespace app\models;

use Yii;
use yii\base\Model;
use yii\web\UploadedFile;




class CommentForm extends Model
{
public $comment;

public function rules()
{
return [
[['comment'], 'required'],
[['comment'], 'string', 'length' => [3, 250]]
];
}

/**
* @param $article_id
* @return bool
*/



public function saveComment($article_id)
{
$comment = new Comment;
$comment->text = $this->comment;
$comment->user_id = Yii::$app->user->id;
$comment->article_id = $article_id;
$comment->status = 1; //подтверждение коммента 0-ожидание
$comment->user->profile->avatar = 'value';
$comment->date = date('Y-m-d');



return $comment->save();


}
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Это не баг в Yii?

Сообщение andku83 »

По структуре таблиц обращение $comment->user->profile->avatar верное, будет ли оно работать зависит от того описаны ли связи у моделей (Comment, User, Profile).
А для чего при сохранении комментария вы меняете аватар пользователя?!
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Это не баг в Yii?

Сообщение rosswe »

Я не собираюсь менять аватар , задача чтоб аватар добавлялся в коммент - идентичный тому который в профиле.

вот модель профиля ..
public function uploadAvatar($filePath)
{
$file = UploadedFile::getInstance($this, 'avatar');

// if no file was uploaded abort the upload
if ( null === $file ) {
return false;
}

// file extension
$fileExt = $file->extension;
// purge filename
$fileName = \Yii::$app->security->generateRandomString();
// update file->name
$file->name = $fileName.".{$fileExt}";
// update avatar field
$this->avatar = $fileName.".{$fileExt}";
// save images to imagePath
$file->saveAs($filePath.$fileName.".{$fileExt}");

return $file;
}


Я понимаю так если всё работало при $comment->user->photo;
то должно и работать при
$comment->user->profile->avatar -
меняю табличку,столбец,но выдаёт ошибку :



in /var/www/example.com/basic/views/partials/comment.php at line 12 – yii\base\ErrorHandler::handleError(8, 'Trying to get property 'avatar' ...', '/var/www/example.com/basic/views...', 12, ...)

<?php if(!empty($comments)):?>

<?php foreach($comments as $comment):?>
<div class="bottom-comment"><!--bottom comment-->
<div class="comment-img">
<img width="100" class="img-circle" src="<?= $comment->user->profile->avatar ;?>" alt="">
<img width="100" class="img-circle" src="<?//= $comment->user->photo; ?>" alt="">
</div>


<div class="comment-text">
<a href="#" class="replay btn pull-right"> Replay</a>

почему он не видит не отрабатывает запрос от другой таблицы не понимаю..
Последний раз редактировалось rosswe 2019.01.20, 18:52, всего редактировалось 1 раз.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Это не баг в Yii?

Сообщение andku83 »

andku83 писал(а): 2019.01.11, 13:18 ... будет ли оно работать зависит от того описаны ли связи у моделей (Comment, User, Profile).
Cудя по описанию ошибки у User не прописана связь на Profile
Аватара пользователя
SiZE
Сообщения: 2813
Зарегистрирован: 2011.09.21, 12:39
Откуда: Perm
Контактная информация:

Re: Это не баг в Yii?

Сообщение SiZE »

Очевидно что вы допустили ошибку в именовании или не добавили метод Comment::getProfile()
https://github.com/yiisoft/yii2/blob/ma ... t.php#L154
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Это не баг в Yii?

Сообщение urichalex »

Никого не смущает, что вызываются связи у новой модели? $comment = new Comment;
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Это не баг в Yii?

Сообщение rosswe »

разобрался ,правда не до конца
во вьюшки комментов обьявил переменные

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

<?php
$user    = \Yii::$app->user->identity;
$profile = $user->profile;
$avatar  = $profile->getImageUrl();
?>
и в цикле вывел идентичные картинки профиля.
вот так

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

<?php if(!empty($comments)):?>
    <?php foreach($comments as $comment):?>
        <div class="bottom-comment"><!--bottom comment-->
 <div class="comment-img">
                <img width="100" class="img-circle" src="<?php echo $avatar ?>"  title="<?php echo $user->username?>" alt="">
            </div>
            <div class="comment-text">
                <a href="#" class="replay btn pull-right"> Replay</a>
             <h5><?= $comment->user->username;?></h5>

                <p class="comment-date">
                    <?= $comment->getDate();?>
                </p>

                <p class="para"><?= $comment->text; ?></p>
            </div>
        </div>
    <?php endforeach;?>
   <?php endif;?>
<!-- end bottom comment-->
вот только когда меняешь пользователя меняются и все картинки в блоге под его профиль.
Это как лучше решить?
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Это не баг в Yii?

Сообщение andku83 »

rosswe писал(а): 2019.01.13, 06:04 вот только когда меняешь пользователя меняются и все картинки в блоге под его профиль.
Это как лучше решить?
Все работает именно так, как вы и делаете: вы ко всем комментариям выводите аватар текущего пользователя.
andku83 писал(а): 2019.01.11, 13:18 По структуре таблиц обращение $comment->user->profile->avatar верное, будет ли оно работать зависит от того описаны ли связи у моделей (Comment, User, Profile).
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Это не баг в Yii?

Сообщение rosswe »

Сделал, так

public function getImage()
{
return $this->profile->getImageUrl();
}

.....................

<?= $comment->user->image; ?>"

заработало как нужно.
Всем спасибо.
Ответить