Форма обратной связи

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Форма обратной связи

Сообщение Artikk »

Контроллер:

Код: Выделить всё

public function actionView($id)
	{
		$girls = Girls::findOne($id);
		if(empty($girls)){
			throw new \yii\web\HttpException(404, 'Такой девушки нет.');
		}
		$date1 = date("M j, Y");

		/* Создаем экземпляр класса */
		$model = new ContactForm();
		if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['emailto'])) {
			Yii::$app->session->setFlash('contactFormSubmitted');
			return $this->refresh();

		}

		$this->setMeta( $girls->title, $girls->keywords, $girls->description);
		return $this->render('view', compact('girls', 'date1', 'model'));

	}
модель:

Код: Выделить всё

<?php
/* Объявляем пространство имен */
namespace app\models;

use Yii;
use yii\base\Model;

/* Объявляем класс формы */
class ContactForm extends Model
{
    /* Объявление переменных */
    public $name, $email, $subject, $body;

    /* Правила для полей формы обратной связи (валидация) */
    public function rules()
    {
        return [
            /* Поля обязательные для заполнения */
            [ ['name', 'email', 'subject', 'body'], 'required'],
            /* Поле электронной почты */
            ['email', 'email'],
        ];
    }

    /* Определяем названия полей */
    public function attributeLabels()
    {
        return [
            'name' => 'Имя',
            'email' => 'Электронный адрес',
            'subject' => 'Тема',
            'body' => 'Сообщение',
        ];
    }

    /* функция отправки письма на почту */
    public function contact($emailto)
    {
        /* Проверяем форму на валидацию */
        if ($this->validate()) {
            Yii::$app->mailer->compose()
                ->setFrom([$this->email => $this->name]) /* от кого */
                ->setTo($emailto) /* куда */
                ->setSubject($this->subject) /* имя отправителя */
                ->setTextBody($this->body) /* текст сообщения */
                ->send(); /* функция отправки письма */

            return true;
        } else {
            return false;
        }
    }
}
Вид:

Код: Выделить всё

<?php if (Yii::$app->session->hasFlash('contactFormSubmitted')): ?>

					<div class="alert alert-success">
						Спасибо за обращение к нам. Мы постараемся ответить вам как можно скорее.
					</div>

				<?php else: ?>

					<?php $form = ActiveForm::begin([
						'id' => 'contact-form', /* Идентификатор формы */
						'options' => ['class' => 'form-horizontal'], /* класс формы */
						'fieldConfig' => [ /* классы полей формы */
							'template' => "<div class=\"col-lg-3\">{label}</div>\n<div class=\"col-lg-9\">{input}</div>\n<div class=\"col-lg-12 col-lg-offset-3 \">{error}</div>"

						],
					]); ?>
					<?= $form->field($model, 'name') ?>
					<?= $form->field($model, 'email') ?>
					<?= $form->field($model, 'subject') ?>

					<?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>
					<div class="form-group">
						<?= Html::submitButton('Отправить сообщение', ['class' => 'btn btn-default waves-effect btn-color-orange btn-color-orange-long', 'name' => 'contact-button']) ?>
					</div>

					<?php ActiveForm::end(); ?>
				<?php endif; ?>
отправляю сообщение, пишет сообщение отправлено, но на почте ничего нет. в чем может быть ошибка?
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

http://www.webapplex.ru/forma-obratnoj- ... na-yii-2.x по этому уроку делал
Аватара пользователя
Haku
Сообщения: 58
Зарегистрирован: 2015.03.11, 07:39

Re: Форма обратной связи

Сообщение Haku »

Проверьте в конфигурации вашего приложения свойство:

Код: Выделить всё

'mailer' => [
	'useFileTransport' => true,
],
оно должно быть определено как false.
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

да, исправил, теперь:
Cannot send message without a recipient
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

я в console.php добавил:

Код: Выделить всё

<?php

$params = require(__DIR__ . '/params.php');
$db = require(__DIR__ . '/db.php');

$config = [
    'id' => 'basic-console',
    'basePath' => dirname(__DIR__),
    'bootstrap' => ['log'],
    'controllerNamespace' => 'app\commands',
    'components' => [
        'mailer' => [
            'class' => 'yii\swiftmailer\Mailer'
        ],
        'cache' => [
            'class' => 'yii\caching\FileCache',
        ],
        'log' => [
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'db' => $db,
    ],
    'params' => $params,
    /*
    'controllerMap' => [
        'fixture' => [ // Fixture generation command line.
            'class' => 'yii\faker\FixtureController',
        ],
    ],
    */
];

if (YII_ENV_DEV) {
    // configuration adjustments for 'dev' environment
    $config['bootstrap'][] = 'gii';
    $config['modules']['gii'] = [
        'class' => 'yii\gii\Module',
    ];
}

return $config;
в уроке:

Код: Выделить всё

Четвертый шаг. В папке config в файле config.php и пишем следующий код.

$params = require(__DIR__ . '/params.php');
//.....
'components' => [
    'mailer' => [
            'class' => 'yii\swiftmailer\Mailer'
            ]
]
//.....
'params => $params,
//....
но у меня нет такого файла
Аватара пользователя
Haku
Сообщения: 58
Зарегистрирован: 2015.03.11, 07:39

Re: Форма обратной связи

Сообщение Haku »

Не могу сказать точно по поводу config.php, но возможно у вас отсутствует параметр "Yii::$app->params['emailto']", т.к. в ошибочном сообщении говорится об отсутствии получателя.
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

ошибка: http://c2n.me/3JsNhpn
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

Не могу сказать точно по поводу config.php, но возможно у вас отсутствует параметр "Yii::$app->params['emailto']", т.к. в ошибочном сообщении говорится об отсутствии получателя.
как исправить?
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

мой params.php:

Код: Выделить всё

<?php

return [
    'adminEmail' => 'моЯпочта@yandex.ua',
];

Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

исправил на

<?php

return [
'emailto' => 'почта.ru@yandex.ua',
];
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

ошибка пропала, как изменила, но сообщение все равно не приходит
caHek2x
Сообщения: 1240
Зарегистрирован: 2016.04.12, 20:41

Re: Форма обратной связи

Сообщение caHek2x »

Artikk писал(а): 2017.04.12, 21:23 я в console.php добавил:

в уроке:
Четвертый шаг. В папке config в файле config.php и пишем следующий код.

но у меня нет такого файла
ну что значит нет ... console.php это конфиг для исполнения консольных команд ...
может web.php ...
посмотрите в вашем index.php будет строка типа такой:

Код: Выделить всё

$config = require(__DIR__ . '/../config/web.php');
Аватара пользователя
Haku
Сообщения: 58
Зарегистрирован: 2015.03.11, 07:39

Re: Форма обратной связи

Сообщение Haku »

caHek2x писал(а): 2017.04.12, 21:50 ну что значит нет ... console.php это конфиг для исполнения консольных команд ...
Там говорилось про файл config.php.
Artikk писал(а): 2017.04.12, 21:42 ошибка пропала, как изменила, но сообщение все равно не приходит
Посмотрите в этой теме. А вообще нужно смотреть, что в логах.
Последний раз редактировалось Haku 2017.04.13, 00:00, всего редактировалось 1 раз.
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

да, в индексе есть в web.php:

'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
// send all mails to a file by default. You have to set
// 'useFileTransport' to false and configure a transport
// for the mailer to send real emails.
'useFileTransport' => false,
],


это стоит
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

есть предложения?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Форма обратной связи

Сообщение urichalex »

Проверьте, вообще отправляется ли почта через mail()
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

urichalex писал(а): 2017.04.12, 23:21 Проверьте, вообще отправляется ли почта через mail()
можете рассказать, как это сделать? первый раз с почтой в yii2 работаю
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Форма обратной связи

Сообщение someweb »

Донастройте mailer

Код: Выделить всё

    'mailer' => [
        'class' => 'yii\swiftmailer\Mailer',
        'transport' => [
            'class' => 'Swift_SmtpTransport',
            'host' => 'localhost',
            'username' => 'username',
            'password' => 'password',
            'port' => '587',
            'encryption' => 'tls',
        ],
    ],
Только host не localhost, а smtp хост почтового сервера.
http://www.yiiframework.com/doc-2.0/yii ... ailer.html
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Artikk
Сообщения: 742
Зарегистрирован: 2017.02.10, 09:12

Re: Форма обратной связи

Сообщение Artikk »

т.к. изменить это:

Код: Выделить всё

'mailer' => [
            'class' => 'yii\swiftmailer\Mailer',
            // send all mails to a file by default. You have to set
            // 'useFileTransport' to false and configure a transport
            // for the mailer to send real emails.
            'useFileTransport' => false,
        ],
на ваш код и все?
someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Форма обратной связи

Сообщение someweb »

https://yandex.ru/support/mail-new/mail-clients.html

Исходящая почта
адрес почтового сервера — smtp.yandex.ru;
защита соединения — SSL;
порт — 465.
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.
Ответить