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

UPD. Запуск писем по crone

Добавляем компонент 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>

Настройка Crone

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" ); 
	}
}
⚠️ **GitHub.com Fallback** ⚠️