Где, каким образом получить результат ответа на запрос в Yii2 и отправить его на емэйл?

Где, каким образом получить результат ответа на запрос, отправляемый таинственными алгоритмами Yii2 после нажатия на кнопку страницы, код которой ниже, и отправить этот результат на емэйл, который укажу при отправке? документацию смотрю, но зацепку найти пока не удается. Или поясните хотя бы почему вардамп пустой. Текст документации говорит о том, что искомое должно быть тут: Yii::$app->response->content. Однако там его нет.

Страницу формы views/contact/index.php дополнил (есть небольшой дубляж по элементам - это себе для обучения):

<?php

use yii\helpers\Html;
use yii\grid\GridView;
use yii\bootstrap4\ActiveForm;

/* @var $this yii\web\View */
/* @var $searchModel app\models\ContactSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

$this->title = 'Контакты';
$this->params['breadcrumbs'][] = $this->title;
?>

<div class="contact-index">

    <h1><?= Html::encode($this->title) ?></h1>

    <p>
        <?= Html::a('Добавить контакт', ['create'], ['class' => 'btn btn-success']) ?>
    </p>

    <?php $LetterInsertion = GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'emptyText' => 'По указанным параметрам сотрудник не найден.',
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

//            'contact_id',
            'last_name',
            'first_name',
            'middle_name',
            'internal_phone',
            'mobile_phone',
            'email_address:email',

//                ['class' => 'app\components\MyActionColumn',
//                    'template' => '{view} {update} {delete}',
//                ],
        ],
    ]);
    $session = Yii::$app->session;
    $session['LetterInsertion'] = $LetterInsertion;
    ?>
    <?php $form = ActiveForm::begin(['id' => 'contact-search']); ?>
    <?= $LetterInsertion ?>
    <?= Html::submitButton('Найти', ['class' => 'btn btn-primary']) ?>
    <?= Html::a('Отменить фильтр', ['index'], ['class' => 'btn btn-outline-primary']); ?>
    <?= Html::resetButton('Сбросить', ['class' => 'btn btn-outline-secondary', 'onclick' => 'window.location.replace("index.php?r=contact");']) ?>
    </p>

    <?php if (Yii::$app->session->hasFlash('contactFormSubmitted')): ?>
        <div class="alert alert-success">
            Сообщение 1 (файл views/contact/index.php)
        </div>

        <p>
            <?php if (Yii::$app->mailer->useFileTransport): ?>
                Сообщение 2 (файл views/contact/index.php)
                <code><?= Yii::getAlias(Yii::$app->mailer->fileTransportPath) ?></code>.
                <code>useFileTransport</code> property of the <code>mail</code>
            <?php endif; ?>
        </p>

    <?php else: ?>
    <p>Сообщение 3 (файл views/contact/index.php)</p>

    <div class="row">
        <div class="col-lg-5">

            <?= $form->field($searchModel, 'email_address')->textInput(['maxlength' => true, 'class' => 'form-control inputNotNull'])->label('Введите Email получателя: ');
            ?>

            <div class="form-group">
                <?= Html::submitButton('Отправить контакты', ['class' => 'btn btn-primary', 'name' => 'send-to-email-button']) ?>
                <?= Html::a('Отправить контакты', ['contact'], ['class' => 'btn btn-outline-primary']); ?>
            </div>

        </div>
    </div>

    <p>
        <?= Html::label('отправить контакты на') ?>
        <?= Html::input('text', 'send_to', 'email адресата') ?>
        <?= Html::submitButton('отправить', ['class' => 'btn btn-primary']) ?>
    </p>
    <?php ActiveForm::end(); ?>
</div>
<?php endif ?>

var_dump(Yii::$app->response->content) при выдаче искомых позиций в количестве нескольких штук получается такой:

/var/www/eg/phbook_basic/views/contact/index.php:53:null 

Ответы (2 шт):

Автор решения: Moonvvell

У вас есть контроллер с каким-то action.

public function actionSendData()
{
    // Получаете данные из базы или еще откуда то (dataProvider etc.)
    $data = DbModel::findAll();
    // $htmlTemplate - темплейт вашего письма. Работает так же как при рендере страницы обычной.
    $mail = \Yii::$app->mailer->compose(['html' => $htmlTemplate], ['data' => $data]);
    $mail->send();
}

Скажу сразу - не совсем понимаю какие данные вы хотите отправлять. Поэтому просто описал как получение данных. Если это данные из dataProvider то вот дока по нему Дата провайдер. Дока по использованию мейлера в Yii2 - Тут. И как по мне у Yii2 довольно понятная документация поэтому прочитайте еще раз. Там расписан процесс как работает MVC в фреймворке. Тык

→ Ссылка
Автор решения: phpBear

В Вашем примере вообще не вижу работы с формой. Не понимаю с чего Вам вообще что-то должно приходить в таком случае. Возможно, я чего-то не знаю конечно. Но лично я бы сделал примерно так - создал модель формы. В ней описал поле в которое будет приходить нужный контент. Там же можно описать все необходимые проверки и отправку на email.

<?php

namespace app\models\forms;

class myForm extends Model {
    public $content;
     public function rules()
    {
        return [
            [['content'], 'safe'],
        ];
    }
    public function sendMail() {
        //тут отправка на почту
    }
}

Далее в view-файле делаете отображение формы

<?php

use yii\helpers\Html;
use yii\grid\GridView;

/* @var $this yii\web\View */
/* @var $model app\models\forms\myForm */
/* @var $searchModel app\models\ContactSearch */
/* @var $dataProvider yii\data\ActiveDataProvider */

use yii\bootstrap\ActiveForm;

$this->title = 'Контакты';
$this->params['breadcrumbs'][] = $this->title;

$form = ActiveForm::begin();
?>
<div class="contact-index">

    <h1><?= Html::encode($this->title) ?></h1>

    <p>
        <?= Html::a('Добавить контакт', ['create'], ['class' => 'btn btn-success']) ?>
    </p>

    <!-- Тут можно поместить контент внутрь поля myForm->content двумя способами -->
    <!-- Самому создать `div` с `id` и `name` таким же как формирует `Yii2::ActiveForm` при выводе `$form->field` (в теории должно сработать, но не проверял) -->
    <!-- Либо создать `hidden` поле через `$form->field` и туда с помощью `javascript` по событию `formSubmit` передать содержимое страницы которое должно быть отправлено -->
    <div id="myform-content" name="myForm[content]">
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'emptyText' => 'По указанным параметрам сотрудник не найден.',
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            'last_name',
            'first_name',
            'middle_name',
            'internal_phone',
            'mobile_phone',
            'email_address:email',

            ['class' => 'yii\grid\ActionColumn'],
        ],
    ]); ?>

    <p>
        <?= Html::submitButton('Найти', ['class' => 'btn btn-primary']) ?>
        <?= Html::resetButton('Сбросить', ['class' => 'btn btn-outline-secondary', 'onclick' => 'window.location.replace("index.php?r=contact");']) ?>
    </p>
    </div>
</div>
<?php
ActiveForm::end();
?>

В контроллере же в методе куда ведет action формы (пусть будет my/create) сделал бы следующее

<?php

namespace app\controllers;
use yii\web\Controller;
class myController extends Controller {
    public function actionCreate() {
        $model = new myForm();
        if (\Yii::$app->request->isPost && count(\Yii::$app->request->post()) > 0 &&  $model->load(\Yii::$app->request->post()) ) {
             //Отправляем почту
             $myForm->sendMail()
             //Выводим отдельную страницу или куда-то перенаправляем               
         }
                
    }

}

→ Ссылка