Рассылка ведомостей о зарплате - uniqcle/Yii2 GitHub Wiki
Скрипт, который 1 раз в месяц по расписанию планировщика отправляет на email адреса сотрудников письмо такого вида: "Уважаемый Марко Поло! 01.05.2017 Вам была начислена заработная плата в размере $5." Информацию о каждой рассылке стоит записывать в файл log.txt
Основной контроллер console/controllers/MailerController.php
namespace console\controllers;
use Yii;
use yii\console\Controller;
use console\models\Employee;
use console\models\Mydate;
use console\models\Sending;
use console\models\Logger;
use yii\helpers\Console;
class MailerController extends Controller
{
public function actionSendsalary(){
//Получаем данные сотрудников
$emailList = Employee::getEmployee();
//Расчет сегодняшней даты
$today = Mydate::getDatetime();
//Отправка писем
$arResult = Sending::run( $emailList, $today );
//Запись данных в лог
Logger::write( $arResult );
}
}
Класс работы с сотрудниками console/models/Employee.php
namespace console\models;
use Yii;
class Employee
{
public static function getEmployee(){
$sql = "SELECT * FROM yii2advanced.employee; ";
return Yii::$app->db->createCommand( $sql )->queryAll();
}
}
Класс Logger console/models/Logger.php
namespace console\models;
use Yii;
class Logger
{
public static function write($arResult){
$handler = fopen('upload/log.txt', 'a+' );
foreach($arResult as $employee):
file_put_contents('upload/log.txt', 'Ведомость отправлена в '.$employee['date'].' для сотрудника '.$employee['fio'].' '. $employee['salary']."\n", FILE_APPEND);
endforeach;
fclose($handler);
}
}
Класс отправки письма с одним методом console/models/Sending.php
namespace console\models;
use Yii;
use yii\helpers\Console;
class Sending
{
public static function run( $emailList, $today ){
$arResult = [];
foreach($emailList as $subscriber):
$result = Yii::$app->mailer->compose("/mail/report.php", [ //шаблон contact в common/mail
'subscriber' => $subscriber['fio'],
'salary' => $subscriber['salary'],
'today' => $today
])
->setFrom( ['[email protected]' => 'Андрей'] )
->setTo( $subscriber['email'] ) // кому отправляем
->setSubject( 'Зарплатная ведомость '.$subscriber['fio'] ) // тема письма
/* ->setTextBody('Текст...') // Закомментировать, если передаем в View
->setHtmlBody('Текст...')*/
->send();
$fio = $subscriber['fio'];
$salary = $subscriber['salary'];
$arResult[$fio]['fio'] = $fio;
$arResult[$fio]['salary'] = $subscriber['salary'];
$arResult[$fio]['date'] = $today;
endforeach;
return $arResult;
}
}