Este é um tutorial muito simples de como criar um formulário na frontend utilizando a Yii2 Advanced.

Models

Models não são mais do que classes PHP onde guardamos regras e variáveis de algo que se pretende executar no site. Existe em Yii dois tipos de models, os models do tipo formulário que são utilizados para lidar com formulários e os models do tipo Active Record (AR) que são utilizados para retirar dados da base dados sobre a forma de objects.

Passando esta primeira introdução, vamos então criar o nosso model tipo formulário cujo o nome do ficheiro será ExemploForm.php

<?php
// define a localização do model.
namespace frontend\models;

// vai buscar as classes superiores que definiam este ficheiro como sendo um model.
use yii\base\Model;

// Nota que dei ao model o mesmo nome do ficheiro "ExemploForm"
class ExemploForm extends Model {
     // Começamos por definir as variáveis dos campos
     public $name;
     public $email;
     
     // Vamos criar algumas regras para os campos do nosso formulário
     public function rules() {
         return [
             // name, email serão campos obrigatórios
            [['name','email'], 'required'],
            // Valida se email é realmente um email
            ['email','email'],
         ];
     }

     // Esta é a função que faz o envio do email utilizando o swiftmailer
     public function sendEmail($email) {
         return Yii::$app->mailer->compose()
             ->setTo(Yii::$app->params['adminEmail'])
             ->setFrom([Yii::$app->params['senderEmail'] => Yii::$app->params['senderName']])
             ->setReplyTo([$this->email => $this->name])
             ->setSubject('Olá')
             ->setTextBody('Isto é um teste')
             ->send();
         }
     }

Notas:
1. Em Yii2 Advanced, a diretoria para os models é frontend/models/.
2. O nome dados ao ficheiro do model é importante pois vai definir o nome final do separador e deve ser coerente com as restantes funções que permitem colocar o formulário a funcionar
3. Os campos Yii::$app->params[‘adminEmail’], Yii::$app->params[‘senderEmail’] e Yii::$app->params[‘senderName’] estão disponíveis no ficheiro common/config/params.php.

Controllers

Os Controllers, são a ponta entre o Models e Views e sem eles nem os models nem as views funcionam. Numa situação simples, é o controller que activa a view e permite criar páginas simples como a página “Quem Somos” aka “Hello World!”. É também no controller onde criamos as ações das classes criadas no model, por exemplo é no controller que devemos criar o loop que irá buscar uma lista de notícias recentes e é no mesmo controller que dizemos que esse loop deve ser visível na view “Notícias”.

Para este exemplo vamos utilizar o ficheiro SiteController.php, este ficheiro vem por defeito na Yii e é onde estão definidos os principais controllers, neste caso do frontend.

<?php
// Logo no início do ficheiro vamos identificar a localização do nosso model
use frontend\models\ExemploForm;

...

// Importante que a function comece por "action" e o restante nome seja igual ao nome atribuído à view.
public function actionExemplo(){
    // Identificamos dentro do controller o model
    $model = new ExemploForm();
    
    // Verifica se o formulário foi submetido e se passou nas validações
   if ($model->load(Yii::$app->request->post()) && $model->validate()) {
        Yii::$app->session->setFlash('success','Dados submetidos com sucesso');
    }

    // Mostrar o formulário, sendo o 'exemplo' o nome da minha view que ficará na diretoria frontend/views/site/exemplo.php
    return $this->render('exemplo', [
        'model' => $model,
    ]);
}

Notas:
1. Em Yii2 Advanced, a diretoria para os controllers é frontend/controllers/.
2. O nosso controller deve começar pela palavra action, seguido do nome da view.

Views

Uma View é onde ficam os elementos do interface do nosso site. Pode ter comandos mais avançados de PHP mas não é recomendado pois quebra a ideia se um sistema MVC.

No meu caso a view “exemplo” criada no controller encontrasse em frontend/views/site/exemplo.php

<?php
// Chamar as extensões necessárias para este exemplo
use yii\helpers\Html;
use yii\bootstrap\ActiveForm; 

// Inicia o formulário
$form = ActiveForm::begin();

// Chama o campo nome e o campo email
echo $form->field($model, 'name');
echo $form->field($model, 'email'); 

// Cria o botão submeter e atribui a class css btn
echo Html::submitButton('Submit', ['class' => 'btn btn-primary']);

ActiveForm::end();                                     

Por fim, basta confirmar se temos o swiftmailer corretamente configurado para fazer o envio dos dados.
Para o fazer ir common/config/main-local.php, e adicionar os seguintes parâmetros:

'mailer' => [
    'class' => 'yii\swiftmailer\Mailer',
    'viewPath' => '@common/mail',
    'useFileTransport' => false,
    'transport' => [
        'class' => 'Swift_SmtpTransport',
        'host' => 'smtp.gmail.com',
        'username' => 'EMAIL@gmail.com',
        'password' => 'PASSWORD',
        'port' => '587',
        'encryption' => 'tls',
    ],
],