Как настроить страницу личных сообщений в Yii2


Yii2 — это мощный фреймворк для разработки веб-приложений на языке PHP. Он предоставляет разработчикам широкие возможности для создания функциональных и удобных веб-приложений. В этой статье мы рассмотрим, как создать страницу личных сообщений в Yii2.

Страница личных сообщений — это важный компонент многих веб-приложений, таких как социальные сети или корпоративные порталы. Она позволяет пользователям обмениваться сообщениями, обсуждать важные вопросы и быть в курсе последних событий. Создание подобной страницы требует некоторых знаний и навыков веб-разработки, но благодаря Yii2 это можно сделать с минимальными усилиями.

Для создания страницы личных сообщений в Yii2 мы будем использовать модель-представление-контроллер (MVC) архитектуру. MVC — это шаблон проектирования, который разделяет приложение на три основные части: модель, представление и контроллер. Модель отвечает за обработку данных, представление — за отображение данных пользователю, а контроллер — за взаимодействие между моделью и представлением.

Создание модели для сообщений

Для создания страницы личных сообщений в Yii2 необходимо создать модель, которая будет представлять собой таблицу в базе данных для хранения сообщений.

Прежде всего, создадим миграцию для создания таблицы сообщений. Для этого выполните команду:

yii migrate/create create_message_table

Откройте файл миграции, который был только что создан, и добавьте следующий код:

«`php

use yii\db\Migration;

/**

* Handles the creation of table `{{%message}}`.

*/

class m210101_000000_create_message_table extends Migration

{

/**

* {@inheritdoc}

*/

public function safeUp()

{

$this->createTable(‘{{%message}}’, [

‘id’ => $this->primaryKey(),

‘from_user_id’ => $this->integer()->notNull(),

‘to_user_id’ => $this->integer()->notNull(),

‘message’ => $this->text()->notNull(),

‘created_at’ => $this->integer()->notNull(),

]);

$this->addForeignKey(

‘fk-message-from_user_id’,

‘{{%message}}’,

‘from_user_id’,

‘{{%user}}’,

‘id’,

‘CASCADE’,

‘CASCADE’

);

$this->addForeignKey(

‘fk-message-to_user_id’,

‘{{%message}}’,

‘to_user_id’,

‘{{%user}}’,

‘id’,

‘CASCADE’,

‘CASCADE’

);

}

/**

* {@inheritdoc}

*/

public function safeDown()

{

$this->dropTable(‘{{%message}}’);

}

}

Затем запустите миграцию командой:

yii migrate

Теперь создадим модель для сообщений. Для этого выполните команду:

yii gii/model —tableName=message

В файле модели, который был только что создан, добавьте следующий код:

«`php

namespace app\models;

use Yii;

/**

* This is the model class for table «message».

*

* @property int $id

* @property int $from_user_id

* @property int $to_user_id

* @property string $message

* @property int $created_at

*

* @property User $fromUser

* @property User $toUser

*/

class Message extends \yii\db\ActiveRecord

{

/**

* {@inheritdoc}

*/

public static function tableName()

{

return ‘message’;

}

/**

* {@inheritdoc}

*/

public function rules()

{

return [

[[‘from_user_id’, ‘to_user_id’, ‘message’, ‘created_at’], ‘required’],

[[‘from_user_id’, ‘to_user_id’, ‘created_at’], ‘integer’],

[[‘message’], ‘string’],

[[‘from_user_id’], ‘exist’, ‘skipOnError’ => true, ‘targetClass’ => User::className(), ‘targetAttribute’ => [‘from_user_id’ => ‘id’]],

[[‘to_user_id’], ‘exist’, ‘skipOnError’ => true, ‘targetClass’ => User::className(), ‘targetAttribute’ => [‘to_user_id’ => ‘id’]],

];

}

/**

* {@inheritdoc}

*/

public function attributeLabels()

{

return [

‘id’ => ‘ID’,

‘from_user_id’ => ‘From User ID’,

‘to_user_id’ => ‘To User ID’,

‘message’ => ‘Message’,

‘created_at’ => ‘Created At’,

];

}

/**

* Gets query for [[FromUser]].

*

* @return \yii\db\ActiveQuery

*/

public function getFromUser()

{

return $this->hasOne(User::className(), [‘id’ => ‘from_user_id’]);

}

/**

* Gets query for [[ToUser]].

*

* @return \yii\db\ActiveQuery

*/

public function getToUser()

{

return $this->hasOne(User::className(), [‘id’ => ‘to_user_id’]);

}

}

Теперь модель сообщений готова к использованию на странице личных сообщений.

Создание контроллера для страницы сообщений

Чтобы создать страницу сообщений в Yii2, необходимо создать соответствующий контроллер. Контроллер обрабатывает запросы пользователя и управляет логикой приложения.

Для начала создадим новый контроллер, назовем его MessagesController. Для этого нужно создать новый файл MessagesController.php в директории controllers вашего проекта.

Контроллер MessagesController должен наследоваться от класса Controller, который по умолчанию предоставляется фреймворком Yii2. Для этого добавим в начало файла следующую строку:

<?phpnamespace app\controllers;use yii\web\Controller;class MessagesController extends Controller{}

Теперь нам нужно создать action-методы, которые будут обрабатывать различные запросы пользователя на странице сообщений. Например, добавим метод actionIndex, который будет отображать список всех сообщений:

public function actionIndex(){// код для отображения списка сообщений}

Теперь мы можем добавить другие action-методы для выполнения различных операций, таких как создание нового сообщения, редактирование или удаление существующих сообщений.

Например, добавим метод actionCreate, который будет отображать форму для создания нового сообщения:

public function actionCreate(){// код для отображения формы создания нового сообщения}

Также можно добавить методы actionEdit и actionDelete для редактирования и удаления сообщений соответственно.

Контроллер MessagesController готов для использования на странице сообщений. Теперь мы можем добавить соответствующие маршруты в файле конфигурации routes.php, чтобы вызвать нужные action-методы при обработке запросов.

Таким образом, создание контроллера для страницы сообщений в Yii2 позволяет нам обрабатывать запросы пользователя и управлять логикой приложения в связи с сообщениями.

Отображение сообщений на странице

На странице личных сообщений необходимо отображать список всех сообщений, отсортированных по дате отправки. Для этой цели можно использовать виджет ListView, который позволяет удобно отображать данные в виде списка.

1. Добавим в представление страницы личных сообщений виджет ListView:

<?php echo ListView::widget(['dataProvider' => $dataProvider,'itemView' => '_message','layout' => "{items}{pager}",]); ?>

В этом коде мы указываем, что данные для отображения передаются виджету через провайдер данных $dataProvider. Также мы указываем, что каждый элемент списка должен быть отображен с помощью представления _message. Наконец, мы задаем макет списка, где {items} отображает сами сообщения, а {pager} добавляет пагинацию для управления навигацией по страницам.

2. Создадим представление _message для отображения отдельного сообщения:

<li><h3><?php echo $model->title; ?></h3><p><?php echo $model->content; ?></p><p class="date"><?php echo Yii::$app->formatter->asDatetime($model->created_at); ?></p></li>

В этом представлении мы используем данные модели $model, чтобы отобразить заголовок сообщения (title), его содержимое (content) и дату отправки (created_at). Мы также используем форматтер Yii::$app->formatter для преобразования даты в удобочитаемый формат.

3. Добавим стили для отображения списка сообщений:

<style>.date {color: grey;font-size: 12px;}</style>

С помощью этих стилей мы устанавливаем серый цвет и малый размер шрифта для даты отправки сообщения.

Теперь при открытии страницы личных сообщений будет отображаться список всех сообщений с их заголовками, содержимым и датами отправки, отсортированных по дате. Пользователь сможет просматривать все сообщения и ориентироваться по датам благодаря пагинации.

Добавить комментарий

Вам также может понравиться