Корпоративный портал — это не просто сайт. Это место, где сотрудники общаются, обмениваются документами и решают рабочие задачи. Yii2 — отличный фреймворк для такой задачи. Он быстрый, гибкий и с ним легко работать. В этой статье я покажу, как построить портал шаг за шагом. Без лишней теории, только практика.
Почему Yii2 подходит для корпоративного портала
Yii2 — это PHP-фреймворк, который создан для крупных проектов. У него есть встроенные инструменты для управления пользователями, правами доступа и базами данных. Всё, что нужно для портала, уже есть в коробке. Например, модуль RBAC (Role-Based Access Control) позволяет гибко настраивать, кто что видит. А Gii — генератор кода — ускоряет разработку в разы.
Вот основные плюсы Yii2 для портала:
- Быстрая разработка — готовые компоненты и шаблоны.
- Безопасность — защита от XSS, CSRF и SQL-инъекций из коробки.
- Масштабируемость — портал выдержит тысячи пользователей.
- Сообщество — много документации и готовых расширений.
С чего начать: установка и настройка
Первый шаг — установка Yii2. Я рекомендую использовать шаблон advanced, потому что он разделяет фронтенд и бэкенд. Для портала это удобно: админка отдельно, пользовательская часть отдельно.
Установите Yii2 через Composer. Вот команда:
composer create-project --prefer-dist yiisoft/yii2-app-advanced portal
После установки выполните инициализацию:
cd portal
php init
Выберите режим Development (0). Затем настройте базу данных в файле common/config/main-local.php. Пример:
return [
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=portal',
'username' => 'root',
'password' => '',
'charset' => 'utf8',
],
],
];
Не забудьте создать базу данных в MySQL. После этого примените миграции:
php yii migrate
Всё готово. Теперь у вас есть базовая структура портала.
Управление пользователями и ролями
Корпоративный портал без пользователей — как офис без сотрудников. В Yii2 управление пользователями уже встроено. Но нам нужно добавить роли. Например, администратор, менеджер и обычный сотрудник.
Для этого используем RBAC. Сначала настройте компонент authManager в конфиге:
// common/config/main.php
'components' => [
'authManager' => [
'class' => 'yii\rbac\DbManager',
],
],
Затем выполните миграцию для RBAC:
php yii migrate --migrationPath=@yii/rbac/migrations
Теперь создадим роли через консольную команду. Сделайте файл console/controllers/RbacController.php:
namespace console\controllers;
use Yii;
use yii\console\Controller;
class RbacController extends Controller
{
public function actionInit()
{
$auth = Yii::$app->authManager;
// Создаем роли
$admin = $auth->createRole('admin');
$manager = $auth->createRole('manager');
$employee = $auth->createRole('employee');
$auth->add($admin);
$auth->add($manager);
$auth->add($employee);
// Создаем разрешения
$viewReports = $auth->createPermission('viewReports');
$viewReports->description = 'Просмотр отчетов';
$auth->add($viewReports);
$editUsers = $auth->createPermission('editUsers');
$editUsers->description = 'Редактирование пользователей';
$auth->add($editUsers);
// Назначаем разрешения ролям
$auth->addChild($manager, $viewReports);
$auth->addChild($admin, $editUsers);
$auth->addChild($admin, $manager);
// Назначаем роль пользователю (например, с ID 1)
$auth->assign($admin, 1);
echo "Roles created successfully.\n";
}
}
Запустите команду:
php yii rbac/init
Теперь у вас есть базовая система ролей. В контроллерах можно проверять права:
if (Yii::$app->user->can('viewReports')) {
// показать отчет
}
Создание модуля новостей и документов
Сердце портала — контент. Новости, документы, объявления. Создадим модуль новостей. Yii2 поддерживает модули, которые изолируют функционал. Это удобно для больших проектов.
Создайте папку frontend/modules/news. Внутри — файл Module.php:
namespace frontend\modules\news;
class Module extends \yii\base\Module
{
public $controllerNamespace = 'frontend\modules\news\controllers';
public function init()
{
parent::init();
}
}
Добавьте модуль в конфиг frontend/config/main.php:
'modules' => [
'news' => [
'class' => 'frontend\modules\news\Module',
],
],
Теперь создайте модель и миграцию для таблицы новостей. В консоли выполните:
php yii gii/model --tableName=news --modelClass=News --ns=frontend\modules\news\models
Создайте миграцию:
php yii gii/crud --modelClass=frontend\modules\news\models\News --controllerClass=frontend\modules\news\controllers\DefaultController
Вот пример контроллера для списка новостей:
namespace frontend\modules\news\controllers;
use yii\web\Controller;
use frontend\modules\news\models\News;
class DefaultController extends Controller
{
public function actionIndex()
{
$news = News::find()->orderBy(['created_at' => SORT_DESC])->all();
return $this->render('index', ['news' => $news]);
}
}
Аналогично можно сделать модуль для документов с загрузкой файлов. Используйте поведение UploadBehavior для удобства.
| Компонент | Назначение | Пример |
|---|---|---|
| Модуль | Изолирует функционал (новости, документы) | frontend/modules/news |
| Модель | Работа с данными из БД | News.php |
| Контроллер | Обработка запросов | DefaultController.php |
| Представление | Отображение HTML | views/default/index.php |
Интеграция поиска и уведомлений
Корпоративный портал должен быть удобным. Два ключевых элемента — поиск и уведомления. Поиск можно сделать через Sphinx или Elasticsearch, но для начала хватит простого LIKE-запроса. Вот пример поиска по новостям:
public function actionSearch($query)
{
$news = News::find()
->where(['like', 'title', $query])
->orWhere(['like', 'content', $query])
->all();
return $this->render('search', ['news' => $news]);
}
Для уведомлений используем WebSocket или просто email. В Yii2 есть встроенная почта через SwiftMailer. Настройте её в конфиге:
'components' => [
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.gmail.com',
'username' => 'your@email.com',
'password' => 'password',
'port' => '587',
'encryption' => 'tls',
],
],
],
Отправка уведомления при создании новости:
Yii::$app->mailer->compose()
->setTo('all@company.com')
->setSubject('Новая новость: ' . $model->title)
->setTextBody($model->content)
->send();
Что в итоге
Мы разобрали создание корпоративного портала на Yii2. Начали с установки, настроили RBAC для ролей, создали модуль новостей и добавили поиск с уведомлениями. Yii2 даёт мощные инструменты, но главное — не перегружать проект. Начинайте с малого: базовые страницы, авторизация, несколько модулей. Потом добавляйте функционал по мере необходимости.
Главный совет: используйте готовые расширения из Composer. Например, для загрузки файлов — kartik-v/yii2-fileinput, для виджетов — kartik-v/yii2-widgets. Это сэкономит часы работы.


