Рассылка ведомостей о зарплате - 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; 
	}
}