Вариантов может быть несколько.
Через модуль.
например есть какой-то модуль. Пусть он установлен или через composer или вручную в приложение.
В конфигурационном файле надо прописать подключение этого модуля.
Например так
'modules' => [
'support' => [
'class' => ModuleTicket::class,
// далее могут быть настройки самого модуля.
],
],
В самом модуле есть файл ModuleTicket.php и Bootstrap.php
Сам Bootstrap.php может выглядеть так
class Bootstrap implements BootstrapInterface
{
/**
* @inheritdoc
*/
public function bootstrap($app)
{
if ($app->hasModule('support') && ($module = $app->getModule('support')) instanceof ModuleTicket) {
$app->urlManager->addRules(
[
'<_m:support>/new-ticket' => '<_m>/ticket/create',
'<_m:support>/<id:\w+>' => '<_m>/ticket/view',
'<_m:support>' => '<_m>/ticket/index',
]
);
if (!$app->has($this->getModule()->queueComponent)) {
$app->set($this->getModule()->queueComponent, [
'class' => Queue::class,
'handle' => true, // whether tasks should be executed immediately
]);
}
}
// Add module I18N category.
if (!isset($app->i18n->translations['slo-nik/*'])) {
$app->i18n->translations['slo-nik/*'] = [
'class' => PhpMessageSource::class,
];
}
}
}
Тут настраиваются и очереди и urlManager и переводы модуля. Всё налету и по условиям может быть настроено.
Можно настроить через компонент
В конфигурационном файле приложения, в секции 'components' подключаете свой компонент.
'siteSettings' => [
'class' => SiteSettings::class
],
Все данные для настройки сайта у Вас хранятся в базе данных. Например, настройки smtp у Вас в базе.
Как подключить свои настройки для mailer в yii?
Вот так
'mailer' => function () {
return Yii::createObject([
'class' => 'yii\swiftmailer\Mailer',
'useFileTransport' => true,
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => Yii::$app->siteSettings->get('SITE.MAIL_HOST'),
'port' => Yii::$app->siteSettings->get('SITE.MAIL_PORT'),
'username' => Yii::$app->siteSettings->get('SITE.MAIL_USER'),
'password' => Yii::$app->siteSettings->get('SITE.MAIL_PASS'),
'encryption' => Yii::$app->siteSettings->get('SITE.MAIL_ENCR')
],
'messageConfig' => [
'to' => [ Yii::$app->siteSettings->get('SITE.EMAIL_ADMIN') ],
'from' => [ Yii::$app->siteSettings->get('SITE.MAIL_USER') ]
]
]);
Все данные берутся из базы.
В общем тут можно по разному действовать.
Вот
тут создаётся магазин на примере yii2. И в этом же мастер-классе рассказано, как работать с контейнером зависимостей.
Ну а компонент настроек сайта делайте по примеру
этой статьи. Статья для первой версии yii, но переделать для второй версии не составит труда.