Console Apps - uniqcle/Yii2 GitHub Wiki
Работают в фоновом режиме:
- Отправка отчетов
- Сбор статистики
- Еженедельная отправка почты
console/controllers/MailerController.php
namespace console\controllers;
use yii\console\Controller;
class MailerController extends Controller
{
public function actionSend(){
echo 'Hello, world!';
}
}
Затем переходим на сервер в папку приложения /var/www/project
запускаем php yii mailer/send
, где mailer
-Controller, а send
- action.
Если собралось много контроллеров и экшенов, то чтобы вывести весь список
php yii
Добавляем компонент mailer
в console/main-local.php
для лучшей безопасности
'components' => [
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => 'smtp.yandex.ru',
'username' => $params['adminEmail'], //От кого приходит почта
'password' => $params['adminPassword'],
'port' => '465',
'encryption' => 'ssl', // у яндекса SSL
],
'useFileTransport' => false, // будем отправлять реальные сообщения, а не в файл
],
]
В файле console/config/params.php
данные доступа к почте
<?php
return [
'adminEmail' => '[email protected]',
'adminName' => 'Andrey',
'adminEmail' => 'it@***.ru',
'adminPassword' => '*****'
];
В файле common/controllers/MailerController.php
namespace console\controllers;
use Yii;
use yii\console\Controller;
class MailerController extends Controller
{
public function actionSend(){
$names = ['Andrey', 'Kirill'];
$adminEmail = Yii::$app->params['adminEmail'];
$adminName = Yii::$app->params['adminName'];
$textTitle = 'Заголовок письма';
$anyMessage = 'Hello';
$result = Yii::$app->mailer->compose('contact', [ //шаблон contact в common/mail
'names' => $names,
'anyMessage' => $anyMessage
])
->setFrom( [$adminEmail => $adminName] )
->setTo( '[email protected]' ) // кому отправляем
->setSubject( $textTitle ) // тема письма
/* ->setTextBody('Текст...') // Закомментировать, если передаем в View
->setHtmlBody('Текст...')*/
->send();
if( $result ){
echo 'Сообщение отправлено';
}
}
}
В файле common/mail/contact.php
<?php
echo $anyMessage
?>
111
<table style="border: 1px solid #ddd; border-collapse: collapse; width: 100%;">
<thead>
<tr style="background: #f9f9f9;">
<th style="padding: 8px; border: 1px solid #ddd;">#</th>
<th style="padding: 8px; border: 1px solid #ddd;">Имя</th>
</tr>
</thead>
<tbody>
<?php $i = 1; foreach($names as $name): ?>
<tr>
<td style="padding: 8px; border: 1px solid #ddd;"><?= $i ?></td>
<td style="padding: 8px; border: 1px solid #ddd;"><?= $name ?></td>
</tr>
<?php $i++; endforeach; ?>
</tbody>
</table>
https://crontab.guru/
Запуск скрипта происходит по полному пути до скрипта php /var/www/project/yii mailer/send
Затем строку * * * * * php /var/www/project/yii mailer/send
в расписание планировщика.
Переходим в него crontab -e
namespace console\controllers;
use yii\console\Controller;
use yii\helpers\Console;
class DateController extends Controller
{
public function actionGetDate(){
Console::output( "test" );
}
}