Вы вообще смотрели обновление вопроса? Где Вы там увидели этот метод.
protected function saveContactform(){
//создаем объект модели
$contactform = new contactform();
$contactform->name =$id['name'];
$contactform->email = $id['email'];
$contactform->subject = $id['subject'];
$contactform->body = $id ['body'];
$contactform->save(false);
}
<?php
namespace app\models;
use Yii;
use yii\db\ActiveRecord;
use yii\db\Expression;
/**
* This is the model class for table "contactform".
*
* @property string $id
* @property string $name
* @property string $email
* @property integer $subject
* @property double $body
* @property string $verifyCode
*/
class Contactform extends ActiveRecord
{
public $id;
public $name;
public $email;
public $subject;
public $body;
public $verifyCode;
public static function tableName()
{
return 'contactform';
}
/**
* @return array the validation rules.
*/
public function rules()
{
return [
/* Поля обязательные для заполнения */
[ ['name', 'email', 'subject', 'body'], 'required'],
/* Поле электронной почты */
['email', 'email'],
/* Капча */
['verifyCode', 'captcha', 'captchaAction'=>'index/captcha'],
/* ['verifyCode', 'captcha','captchaAction'=>'/contactus/default/captcha'],*/
];
}
/**
* @return array customized attribute labels
*/
public function attributeLabels()
{
return [
'verifyCode' => 'Подтвердите код',
'name' => 'Имя',
'email' => 'Электронный адрес',
'subject' => 'Тема',
'body' => 'Сообщение',
];
}
/**
* Sends an email to the specified email address using the information collected by this model.
* @param string $email the target email address
* @return boolean whether the model passes validation
*/
public function contact($adminEmail)
{
if ($this->validate()) {
Yii::$app->mailer->compose()
->setFrom(Yii::$app->params['adminEmail']) /* от кого */
/* ->setFrom(['oc.mcdir@yandex.ru' => $this->name])*/
// ->setFrom(['adminmail@mail.ru' => 'yii2.loc'])
// ->setTo($this->feedback_email) /* куда */
->setTo([$this->email => $this->name,'adminmail@mail.ru' => 'yii2.loc'])
->setSubject('Админ') /* имя отправителя */
->setTextBody('Добрый день! Ваше сообщение принято!')->setCharset('UTF-8') /* текст сообщения */
->send(); /* функция отправки письма */
/*Cохранить данные */
// Yii::$app->runAction('index/saveContactForm');
$this->saveContactform();
return true;
} else {
return false;
}
}
protected function saveContactform(){
//создаем объект модели
$contactform = new contactform();
$contactform->name =$id['name'];
$contactform->email = $id['email'];
$contactform->subject = $id['subject'];
$contactform->body = $id ['body'];
$contactform->save(false);
}
}
<?php
namespace app\controllers;
use Yii;
use yii\App\Controller;
use app\models\ContactForm;
use yii\web\Request;
class IndexController extends AppController
{
public function actions()
{
return [
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
]
];
}
public function actionContact()
{
// $this->layout = 'contact';
$this->layout = false;
/* Создаем экземпляр класса */
$model = new ContactForm();
/* получаем данные из формы и запускаем функцию отправки contact, если все хорошо, выводим сообщение об удачной отправке сообщения на почту */
if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail']))
// $model->save();
// $model->saveContactform();
{
Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh();
/* иначе выводим форму обратной связи */
} else {
return $this->render('contact', [
'model' => $model,
]);
}
}
}
/*Cохранить данные */
Yii::$app->runAction('index/saveContactForm');
$this->save();
yii\base\InvalidRouteException: Unable to resolve the request: index/saveContactForm in D:\sites\yii2.loc\vendor\yiisoft\yii2\base\Controller.php:128
Stack trace:
#0 D:\sites\yii2.loc\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Controller->runAction('saveContactForm', Array)
#1 D:\sites\yii2.loc\models\Contactform.php(108): yii\base\Module->runAction('index/saveConta...')
#2 D:\sites\yii2.loc\controllers\IndexController.php(37): app\models\Contactform->contact('adminmail@mail....')
#3 [internal function]: app\controllers\IndexController->actionContact()
#4 D:\sites\yii2.loc\vendor\yiisoft\yii2\base\InlineAction.php(57): call_user_func_array(Array, Array)
#5 D:\sites\yii2.loc\vendor\yiisoft\yii2\base\Controller.php(157): yii\base\InlineAction->runWithParams(Array)
#6 D:\sites\yii2.loc\vendor\yiisoft\yii2\base\Module.php(528): yii\base\Controller->runAction('contact', Array)
#7 D:\sites\yii2.loc\vendor\yiisoft\yii2\web\Application.php(103): yii\base\Module->runAction('index/contact', Array)
#8 D:\sites\yii2.loc\vendor\yiisoft\yii2\base\Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#9 D:\sites\yii2.loc\web\index.php(12): yii\base\Application->run()
#10 {main}
Next yii\web\NotFoundHttpException: Страница не найдена. in D:\sites\yii2.loc\vendor\yiisoft\yii2\web\Application.php:115
Stack trace:
#0 D:\sites\yii2.loc\vendor\yiisoft\yii2\base\Application.php(386): yii\web\Application->handleRequest(Object(yii\web\Request))
#1 D:\sites\yii2.loc\web\index.php(12): yii\base\Application->run()
#2 {main}
// метод принимает корзину и id сохр.заказа
protected function saveOrderItems($items, $order_id){
//проходим по массиву корзины карт и получаем id товара и инфо о заказе
foreach($items as $id => $item){
//создаем объект модели
$order_items = new OrderItems();
//id заказа
$order_items->order_id = $order_id;
// id товара
$order_items->product_id = $id;
$order_items->name = $item['name'];
$order_items->price = $item['price'];
$order_items->qty_item = $item['qty'];
//кол-во умн.на цену
$order_items->sum_item = $item['qty'] * $item['price'];
$order_items->save();
}
}
<?php
namespace app\models;
use Yii;
use yii\base\Model;
/**
* ContactForm is the model behind the contact form.
*/
class ContactForm extends Model
{
public $name;
public $email;
public $subject;
public $body;
public $verifyCode;
/**
* @return array the validation rules.
*/
public function rules()
{
return [
/* Поля обязательные для заполнения */
[ ['name', 'email', 'subject', 'body'], 'required'],
/* Поле электронной почты */
['email', 'email'],
/* Капча */
['verifyCode', 'captcha', 'captchaAction'=>'index/captcha'],
/* ['verifyCode', 'captcha','captchaAction'=>'/contactus/default/captcha'],*/
];
}
/**
* @return array customized attribute labels
*/
public function attributeLabels()
{
return [
'verifyCode' => 'Подтвердите код',
'name' => 'Имя',
'email' => 'Электронный адрес',
'subject' => 'Тема',
'body' => 'Сообщение',
];
}
public function contact($emailto)
{
if(Yii::$app->mailer->compose()
->setFrom(Yii::$app->params['adminEmail']) /* от кого */
->setTo([$this->email => $this->name])
->setSubject('Админ') /* имя отправителя */
->setTextBody('Добрый день! Ваше сообщение принято!')->setCharset('UTF-8') /* текст сообщения */
->send() /* функция отправки письма */
){
return true;
} else {
return false;
}
}
}
354
Боковое сообщение может быть очень загадочным («Начать начало ввода почты . »). Это типичный ответ на команду DATA.
Сервер получил данные «От» и «Кому» электронной почты и готов получить сообщение тела.
503
Сервер столкнулся с плохой последовательностью команд или требует аутентификации.
В случае «плохой последовательности» сервер отключил свои команды в неправильном порядке, как правило, из-за сломанного соединения. Если требуется аутентификация, вы должны ввести свое имя пользователя и пароль.
А почему у Вас тут не полностью адрес?
'host' => ('smtp.gmail.com'),
/* 'options' => array('hostname' => 'smtp.gmail.com',*/
/* 'username' => 'email',
'password' => 'pass',
'port' => '465',
"encryption" => ("tls"),*/
<?php
namespace app\controllers;
use Yii;
use yii\filters\AccessControl;
use yii\web\Controller;
use yii\filters\VerbFilter;
use app\models\LoginForm;
use app\models\ContactForm;
use app\modules\contactus\controllers;
class SiteController extends Controller
{
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['logout'],
'rules' => [
[
//'actions' => ['logout'],
'actions' => ['captcha','index','logout'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post','get'],
],
],
];
}
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
];
}
/* public function actionIndex()
{
// return $this->render('index');
$this->render('default', [
'model' => $model,
]);
}*/
public function actionIndex()
{
$model = new ContactForm();
if ($model->load(Yii::$app->request->post()) && $model->contact(setting::ADMIN_EMAIL_ADDRESS)) {
Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh();
} else {
return $this->render('default', [
'model' => $model,
]);
}
}
public function actionLogin()
{
if (!\Yii::$app->user->isGuest) {
return $this->goHome();
}
$model = new LoginForm();
if ($model->load(Yii::$app->request->post()) && $model->login()) {
return $this->goBack();
}
return $this->render('login', [
'model' => $model,
]);
}
public function actionLogout()
{
Yii::$app->user->logout();
return $this->goHome();
}
/* public function actionContact()
{
$model = new ContactForm();
if ($model->load(Yii::$app->request->post()) && $model->contact(Yii::$app->params['adminEmail'])) {
Yii::$app->session->setFlash('contactFormSubmitted');
return $this->refresh();
}
return $this->render('contact', [
'model' => $model,
]);
}*/
public function actionAbout()
{
return $this->render('about');
}
}
<?php
return [
'adminEmail' => '@gmail.com',
'emailto' => '@mail.ru',
];
'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, //если false то письма будут отпр. если true то в папке runtime
'transport'=>[
'class' => 'Swift_SmtpTransport',
'host' => ('smtp.mail.ru'),
'port' => ('465'), // для mail.ru
'encryption' => ('ssl'), // tls
'username' => ('почта mail'),
'password' => ('paroll'),
],
],
throw new InvalidConfigException('Invalid CAPTCHA action ID: ' . $this->captchaAction);
<!-- Поля формы и капча -->
<?= $form->field($model, 'name') ?>
<?= $form->field($model, 'email') ?>
<?= $form->field($model, 'subject') ?>
<?= $form->field($model, 'body')->textArea(['rows' => 6]) ?>
<?=$form->field($model, 'verifyCode')->widget(Captcha::className(), [
'captchaAction' => '/index/captcha',
'template' => '<div class="row"><div class="col-lg-4">{image}</div><div class="col-lg-7">{input}</div></div>',
])?>
<!-- Кнопка отправки формы-->
<div class="form-group">
<?= Html::submitButton('Отправить сообщение', ['class' => 'btn btn-default waves-effect btn-color-orange btn-color-orange-long', 'name' => 'contact-button']) ?>
</div>
$ content = $ this-> getView () -> render ($ view, $ params, $ this); return $ this-> renderContent ($ content);
return $ this-> render ('контакт', [ 'model' => $ model, ]);
<?php
use yii\helpers\Html;
use yii\bootstrap\ActiveForm;
use yii\captcha\Captcha;
/* @var $this yii\web\View */
/* @var $form yii\bootstrap\ActiveForm */
/* @var $model app\models\ContactForm */
$this->title = 'Контакты';
?>
<article class="col-xs-12 col-lg-6">
<div class="row margin-null">
<!-- Заголовок -->
<h1><?= Html::encode($this->title) ?></h1>
<!-- Условие отправления формы, если она отправлена выводим сообщение -->
<?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]) ?>
<?=$form->field($model, 'verifyCode')->widget(Captcha::className(), [
'captchaAction' => '/index/captcha',
'template' => '<div class="row"><div class="col-lg-4">{image}</div><div class="col-lg-7">{input}</div></div>',
])?>
<!-- Кнопка отправки формы-->
<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; ?>
</div>
</article>
<?php
$params = require(__DIR__ . '/params.php');
$config = [
'id' => 'basic',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
'language' => 'ru-RU',
// контроллер по умолчанию вместо site/index для польз.части
'defaultRoute' => 'category/index',
'modules' => [
'admin' => [
'class' => 'app\modules\admin\Module',
'layout' => 'admin',
'defaultRoute' => 'order/index',
],
'yii2images' => [
'class' => 'rico\yii2images\Module',
//be sure, that permissions ok
//if you cant avoid permission errors you have to create "images" folder in web root manually and set 777 permissions
'imagesStorePath' => 'upload/store', //path to origin images
'imagesCachePath' => 'upload/cache', //path to resized copies
'graphicsLibrary' => 'GD', //but really its better to use 'Imagick'
'placeHolderPath' => '@webroot/upload/store/no-image.png', // if you want to get placeholder when image not exists, string will be processed by Yii::getAlias
],
],
'components' => [
'request' => [
// !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
'cookieValidationKey' => '6H8SRuk9HIPbdCxI7C0lt16sl9rA1luC',
'baseUrl'=>'',
],
'cache' => [
'class' => 'yii\caching\FileCache',
],
'user' => [
'identityClass' => 'app\models\User',//если свой класс user, то здесь переименовать
'enableAutoLogin' => true, //авторизация польз.на основе куки
// куда будет перенапр.польз.если неавтор.
//'loginUrl' => 'cart/view'
],
'errorHandler' => [
'errorAction' => 'site/error',
],
'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, //если false то письма будут отпр. если true то в папке runtime
'transport'=>[
'class' => 'Swift_SmtpTransport',
'host' => ('smtp.mail.ru'),
'port' => ('465'), // для mail.ru
'encryption' => ('ssl'), // tls
'username' => ('medeyacom'),
'password' => ('bitrix111'),
],
],
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => 'yii\log\FileTarget',
'levels' => ['error', 'warning'],
],
],
],
'db' => require(__DIR__ . '/db.php'),
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
// более конкретные правила должны нах.впереди более общих
// page и номер стр.
'category/<id:\d+>/page/<page:\d+>' => 'category/view',
//ссылка соотв. контр.cat и экшену view
'category/<id:\d+>' => 'category/view',
//для ссылки карточки товаров
'product/<id:\d+>' => 'product/view',
'search/<id:\d+>' => 'category/search',
],
],
],
'controllerMap' => [
'elfinder' => [
'class' => 'mihaildev\elfinder\PathController',
'access' => ['@'], //доступ к редактору только для авт.польз.
'root' => [
'baseUrl'=>'/web',//папка web upload добавляет сам.
// 'basePath'=>'@webroot',
'path' => 'upload/global',//куда загружается файл
'name' => 'Global'//название папки для загрузки в редакторе
// на хост.дать права на запись
],
]
],
'params' => $params,
];
if (YII_ENV_DEV) {
// configuration adjustments for 'dev' environment
$config['bootstrap'][] = 'debug';
$config['modules']['debug'] = [
'class' => 'yii\debug\Module',
];
$config['bootstrap'][] = 'gii';
$config['modules']['gii'] = [
'class' => 'yii\gii\Module',
];
}
return $config;
private $dir_tmpl;
Возможно, его нужно изменить как-то, также в$template = $this->dir_tmpl.$file.'.tpl';
Пробовал так: