не понимаю откуда ошибка

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

не понимаю откуда ошибка

Сообщение riaron »

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

<?php
use yii\widgets\ActiveForm;
use yii\helpers\Html;

use yii\widgets\LinkPager;
use yii\helpers\Url;
?>
<div id='middle'>
    <?
    foreach ($posts as $post){

        echo "
    <div class='post'>
        <div><b>$post->name</b></div><div><b>$post->date</b></div><br>
        <div><b>$post->text</b></div><br>
	</div>
";
    }
    ?>
    <div class="pagination">
        <div class="pagination">
            <?
            echo LinkPager::widget([
                'pagination' => $pagination,
            ]); ?></div>
    </div><br>
    <hr>
    <div id="comm1">
        <div id ='coment1'>
            Оставить комментарий
        </div>
    </div><br>
    <div>
        <table>
            <?php $form = ActiveForm::begin(['options' => ['id' => 'inputform', 'options' => ['class' => 'inputform','enctype' => 'multipart/form-data']]])?>

            <tr>
                <td>Ваше имя</td>
                <td>&nbsp</td><td>&nbsp</td>

            </tr><tr>

                <td><?= $form->field($model, 'name')->label(false);?>
                </td><td>&nbsp</td><td>&nbsp</td>
            </tr><tr>
                <td>            Ваш комментарий
                </td>
                <td>&nbsp</td><td>&nbsp</td>
            </tr><tr>

                <td><?= $form->field($model, 'text')->textArea()->label(false);?></div><br>
    <td>&nbsp</td><td>&nbsp</td>
    </td>
    </tr>
    <tr>

        <td>&nbsp</td><td>&nbsp</td><td> <div id="sbutton"><?= Html::submitButton('Отправить', ['class' => 'btn btn-success'])?></div>
        </td></tr></div>
        </table> </div><br>

<?php ActiveForm::end() ?>




</div>[img]https://ibb.co/vD7SKtp[/img]
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: не понимаю откуда ошибка

Сообщение rak »

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

 <?
    foreach ($posts as $post){

        echo "
    <div class='post'>
        <div><b>$post->name</b></div><div><b>$post->date</b></div><br>
        <div><b>$post->text</b></div><br>
	</div>
";
    }
    ?>
ошибка тут, почему - сложно сказать, как минимум не стоит использовать <?.
Ну и вообще, для чего тут html запакован в строку?
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

Re: не понимаю откуда ошибка

Сообщение riaron »

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

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

<? foreach($posts as $post){
			?><div><?= "$post->name:$post->date"; ?> <br> <?= "$post->text"; ?></div><br><? }
		?>
выдает
Trying to get property 'name' of non-object
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: не понимаю откуда ошибка

Сообщение ElisDN »

Вписывайте без кавычек.
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: не понимаю откуда ошибка

Сообщение unknownby »

riaron писал(а): 2020.12.22, 21:57 как можно решить проблему, я часто такое писал и нигде проблем не было.
А вот так?

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

<?php foreach($posts as $post) { ?>
	<div>
		<?= $post->name . ":" . $post->date; ?>
		<br>
		<?= $post->text; ?>
	</div>
	<br>
<?php } ?>
И зависит что приходит в $posts - массив массивов или массив объектов. Потому что по итогу в $post может быть массив или объект и нужно работать в соответствии с этим.
Или объект

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

$post->name
Или массив

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

$post['name']
Короткие теги (третий пример) доступны по умолчанию, но их можно отключить с помощью директивы short_open_tag в конфигурационном файле php.ini или отключены по умолчанию, если PHP был скомпилирован с опцией --disable-short-tags.
Поскольку короткие теги можно отключить, рекомендуется использовать только обычные теги (<?php ?> and <?= ?>) для максимальной совместимости. (с) https://www.php.net/manual/ru/language. ... hptags.php
Последний раз редактировалось unknownby 2020.12.23, 08:57, всего редактировалось 1 раз.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: не понимаю откуда ошибка

Сообщение ElisDN »

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

<?= $post->name ?>: <?= $post->date ?>
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

Re: не понимаю откуда ошибка

Сообщение riaron »

Выдает ту же ошибку?
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: не понимаю откуда ошибка

Сообщение rak »

riaron писал(а): 2020.12.23, 13:33 Выдает ту же ошибку?
это к кому вопрос? :D
riaron
Сообщения: 97
Зарегистрирован: 2018.12.04, 14:12

Re: не понимаю откуда ошибка

Сообщение riaron »

написал в виде массива ошибка исчезла но теперь ничего не выводит хотя в базе есть одно значение
вот контроллер:

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

 public function actionPosts()
    { if( Yii::$app->request->isAjax){
            debug(Yii::$app->request->post());
            return 'posts';
        }
        $model = new Posts();
        if( $model->load(Yii::$app->request->post()) ){
			$model->date=date("Y-m-d H:i:s");  
            if( $model->save() ){
                Yii::$app->session->setFlash('success', 'Данные приняты');
            }else{
                Yii::$app->session->setFlash('error', 'Ошибка');
            }
        }

        $posts = Posts::find();
         $pagination = new Pagination(['totalCount' => $posts->count(),
             'defaultPageSize'=>6]);
         $posts = $posts->offset( $pagination->offset )->limit( $pagination->limit )->all();
        return $this->render('posts',  ['posts' => $posts,'model' => $model,]);
    }
unknownby
Сообщения: 749
Зарегистрирован: 2019.11.05, 16:34
Контактная информация:

Re: не понимаю откуда ошибка

Сообщение unknownby »

riaron писал(а): 2020.12.23, 16:38 написал в виде массива ошибка исчезла но теперь ничего не выводит хотя в базе есть одно значение
вот контроллер:

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

 public function actionPosts()
    { if( Yii::$app->request->isAjax){
            debug(Yii::$app->request->post());
            return 'posts';
        }
        $model = new Posts();
        if( $model->load(Yii::$app->request->post()) ){
			$model->date=date("Y-m-d H:i:s");  
            if( $model->save() ){
                Yii::$app->session->setFlash('success', 'Данные приняты');
            }else{
                Yii::$app->session->setFlash('error', 'Ошибка');
            }
        }

        $posts = Posts::find();
         $pagination = new Pagination(['totalCount' => $posts->count(),
             'defaultPageSize'=>6]);
         $posts = $posts->offset( $pagination->offset )->limit( $pagination->limit )->all();
        return $this->render('posts',  ['posts' => $posts,'model' => $model,]);
    }
Чтобы использовать $posts как массив, нужно преобразовать запрос, иначе используется объект.

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

$posts = $posts->offset( $pagination->offset )->limit( $pagination->limit )->asArray()->all();
Конкретно у вас используется как объект. Поэтому переделывание во вьюхе ничего не даст, там нужно использовать объект, как было ранее написано.
Используйте var_dump и проверяйте, что находится в нужных вам переменных и будет вам счастье :)
Ответить