Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 25.04.2016 12:59:41

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

Здравствуйте.
Начну немного с оффтопа. Пусть в аду трижды горят те разрабы, которые писали сайт, которым я сейчас занимаюсь.
Теперь к делу smile

Я с laravel ранее не сталкивался, для меня многое не понятно, но пытаюсь разобраться. На сайте есть форма заказа щитов, можно выбрать несколько и нажать "Отправить заказ". Данные на эту страницу не передаются, т.е. на странице, где уже можно оформить заказ (почту, телефон написать) - "Выбрано 0 щитов". НО. Пару раз у меня получалось из админки (какая-то самописная хрень egg-cms) пересохранить страницу и перейти именно из админки, и тогда выбирались щиты. Можно было их выбирать, закрыть страницу, зайти заново - и все работало. Кроме отправки письма. Подскажите, откуда-куда копать, просматривал темплейты, нашел код, который отвечает за отображение сия страницы, внутри:

@extends(Helper::layout())
@section('page_class')request-form @stop
@section('style')
@stop
@section('content')

    <div class="decals"></div>
    <form id="request-form" action="{{ URL::route('app.order-billboard') }}" method="POST">
        <h1>Заявка на размещение</h1>
        <div class="wrapper">
            <div class="selected-billboards">
                <div class="row title">Выбраные щиты:</div>
                <div class="row list">
                    <div class="more"><a href="{{ URL::route('page', 'billboards') }}">Добавить ешё щит</a></div>
                </div>
            </div>
            <div class="row">
                <!--input(type="hidden" name="billboards")-->
            </div>
            <div class="row need-design">
                <label>
                    <input type="checkbox" name="need_design" value="1" checked="checked">
                    <div class="label">Разработать макет рекламного щита</div>
                </label>
            </div>
            <div class="row"></div>
            <div class="row">
                <label>
                    <div class="label">Организация*:</div>
                    <input name="org">
                </label>
            </div>
            <div class="row"></div>
            <div class="row">
                <label>
                    <div class="label">Телефон*:</div>
                    <input name="phone" placeholder="+7">
                </label>
            </div>
            <div class="row"></div>
            <div class="row">
                <label>
                    <div class="label">Email:</div>
                    <input name="email">
                </label>
            </div>
            <div class="row"></div>
            <div class="row comment">
                <label>
                    <div class="label">Коментарий к заказу:</div>
                    <textarea name="comment" placeholder="Например, укажите удобное время для звонка"></textarea>
                </label>
            </div>
            <div class="row">
                <center>
                    <button type="submit">Оформить заказ</button>
                </center>
            </div>
        </div>
        <div class="final">
            <div class="green">Спасибо!</div>
            <div class="text">Ваша заявка<br> успешно отправлена.</div>
        </div>
    </form>

@stop


@section('scripts')
@stop

Т.е., как я понимаю, управляет событиями на этой странице {{ URL::route('app.order-billboard') }} и {{ URL::route('page', 'billboards') }} - но в файле routes.php я ничего и близко похожего не нашел...

Далее, есть js-скрипты почти для каждой страницы, в том числе для страницы этих самых щитов. Что бы я в этом скрипте не менял - эффекта ноль. Понятно, что возможно это какой-то промежуточно-тестовый вариант от разработчиков и они его, естесна, забыли выпилить (как и тонны другого г#вна), но ведь есть где-то "финальные" аналогичные файлы, прописанные действия внутри которых что-то реально делают. Как можно найти это?? Что за что отвечает?

Кроме того, я изменил драйвер почты в /app/config/mail.php: [PHP]'driver' => 'mail',[/PHP]
И теперь при нажатии на кнопку обратной формы "Отправить сообщение" появляется "Сообщение успешно отправлено!" но само сообщение не приходит.
Есть еще файл app/modules/application/application.controller.php, в котором упоминается хоть что-то связанное с order-billboard и billboards. Его код:

<?php

class ApplicationController extends BaseController {

    public static $name = 'application';
    public static $group = 'application';

    /****************************************************************************/

    ## Routing rules of module
    public static function returnRoutes($prefix = null) {

        Route::group(array(), function() {

            Route::any('/ajax/send-message', array('as' => 'app.send-message', 'uses' => __CLASS__.'@postSendMessage'));
            Route::any('/ajax/order-billboard', array('as' => 'app.order-billboard', 'uses' => __CLASS__.'@postOrderBillboard'));
            Route::any('/ajax/order', array('as' => 'app.order', 'uses' => __CLASS__.'@postOrder'));
        });
    }


    /****************************************************************************/


	public function __construct(){
        #
	}


    public function postSendMessage() {

        #Helper::dd(Input::all());

        /*
        $name = Input::get('name');
        $email = Input::get('email');
        $text = Input::get('text');
        */

        $json_request = array('status' => FALSE, 'responseText' => '');

        /**
         * Более-менее стандартный функционал для отправки сообщения на e-mail
         */
        $data = Input::all();
        Mail::send('emails.feedback', $data, function ($message) use ($data) {

            #$message->from(Config::get('mail.from.address'), Config::get('mail.from.name'));

            /**
             * Данные (адрес и имя) для отправки сообщения, берутся из словаря Опции
             */
            #/*
            $from_email = Dic::valueBySlugs('options', 'from_email');
            $from_email = is_object($from_email) && isset($from_email->name) ? $from_email->name : (Config::get('mail.from.address') ?: 'no@reply.ru');
            $from_name = Dic::valueBySlugs('options', 'from_name');
            $from_name = is_object($from_name) && isset($from_name->name) ? $from_name->name : (Config::get('mail.from.name') ?: 'No-reply');
            #*/

            /**
             * Адрес, на который будет отправлено письмо, берется из словаря Опции
             */
            $email = Dic::valueBySlugs('options', 'email');
            $email = is_object($email) && isset($email->name) ? $email->name : (Config::get('mail.feedback.address') ?: 'dev@null.ru');

            /**
             * Если в адресе есть запятая - значит нужно отправить копию на все адреса
             */
            $ccs = array();
            if (strpos($email, ',')) {
                $ccs = explode(',', $email);
                foreach ($ccs as $e => $email)
                    $ccs[$e] = trim($email);
                $email = array_shift($ccs);
            }

            $message->from($from_email, $from_name);
            $message->subject('Трибуна: сообщение обратной связи - ' . @$data['name']);
            $message->to($email);

            if (isset($ccs) && is_array($ccs) && count($ccs))
                foreach ($ccs as $cc)
                    $message->cc($cc);
        });

        $json_request['status'] = TRUE;
        #$json_request['responseText'] = Input::all();

        return Response::json($json_request, 200);

        return '1';
    }



    public function postOrderBillboard() {

        #Helper::ta((array)Input::get('billboards'));

        $billboards = Dic::valuesBySlugAndIds('billboards', (array)Input::get('billboards'));

        #Helper::ta($billboards);
        #header('HTTP/1.0 404 Not Found');
        #die;


        $json_request = array('status' => FALSE, 'responseText' => '');

        /**
         * Более-менее стандартный функционал для отправки сообщения на e-mail
         */
        $data = Input::all();
        $data['billboards'] = $billboards;
        Mail::send('emails.order-billboard', $data, function ($message) use ($data) {

            #$message->from(Config::get('mail.from.address'), Config::get('mail.from.name'));

            /**
             * Данные (адрес и имя) для отправки сообщения, берутся из словаря Опции
             */
            #/*
            $from_email = Dic::valueBySlugs('options', 'from_email');
            $from_email = is_object($from_email) && isset($from_email->name) ? $from_email->name : (Config::get('mail.from.address') ?: 'no@reply.ru');
            $from_name = Dic::valueBySlugs('options', 'from_name');
            $from_name = is_object($from_name) && isset($from_name->name) ? $from_name->name : (Config::get('mail.from.name') ?: 'No-reply');
            #*/

            /**
             * Адрес, на который будет отправлено письмо, берется из словаря Опции
             */
            $email = Dic::valueBySlugs('options', 'order_email');
            $email = is_object($email) && isset($email->name) ? $email->name : (Config::get('mail.feedback.address') ?: 'dev@null.ru');

            /**
             * Если в адресе есть запятая - значит нужно отправить копию на все адреса
             */
            $ccs = array();
            if (strpos($email, ',')) {
                $ccs = explode(',', $email);
                foreach ($ccs as $e => $email)
                    $ccs[$e] = trim($email);
                $email = array_shift($ccs);
            }

            $message->from($from_email, $from_name);
            $message->subject('Трибуна: заявка на размещение - ' . @$data['org']);
            $message->to($email);

            if (isset($ccs) && is_array($ccs) && count($ccs))
                foreach ($ccs as $cc)
                    $message->cc($cc);
        });



        if (count($billboards)) {

            #Helper::ta($billboards);
            #header('HTTP/1.0 404 Not Found');
            #die;

            foreach ($billboards as $billboard) {

                if ($billboard->status == 'free') {

                    $carbon = \Carbon\Carbon::now();
                    $carbon->addDays(5);

                    $billboard->update_field('status', 'reserved');
                    $billboard->update_field('status_limit', $carbon->format('Y-m-d'));
                }

                $billboard->update_field('need_manual_check', 1);
            }
            #$billboards = Helper::arrayForSelect($billboards, 'name');
        }


        $json_request['status'] = TRUE;
        #$json_request['responseText'] = Input::all();

        return Response::json($json_request, 200);
    }



    public function postOrder() {

        $json_request = array('status' => FALSE, 'responseText' => '');

        /**
         * Более-менее стандартный функционал для отправки сообщения на e-mail
         */
        $data = Input::all();
        Mail::send('emails.order', $data, function ($message) use ($data) {

            #$message->from(Config::get('mail.from.address'), Config::get('mail.from.name'));

            /**
             * Данные (адрес и имя) для отправки сообщения, берутся из словаря Опции
             */
            #/*
            $from_email = Dic::valueBySlugs('options', 'from_email');
            $from_email = is_object($from_email) && isset($from_email->name) ? $from_email->name : (Config::get('mail.from.address') ?: 'no@reply.ru');
            $from_name = Dic::valueBySlugs('options', 'from_name');
            $from_name = is_object($from_name) && isset($from_name->name) ? $from_name->name : (Config::get('mail.from.name') ?: 'No-reply');
            #*/

            /**
             * Адрес, на который будет отправлено письмо, берется из словаря Опции
             */
            $email = Dic::valueBySlugs('options', 'order_email');
            $email = is_object($email) && isset($email->name) ? $email->name : (Config::get('mail.feedback.address') ?: 'dev@null.ru');

            /**
             * Если в адресе есть запятая - значит нужно отправить копию на все адреса
             */
            $ccs = array();
            if (strpos($email, ',')) {
                $ccs = explode(',', $email);
                foreach ($ccs as $e => $email)
                    $ccs[$e] = trim($email);
                $email = array_shift($ccs);
            }

            $message->from($from_email, $from_name);
            $message->subject('Трибуна: заявка на размещение - ' . @$data['org']);
            $message->to($email);

            if (isset($ccs) && is_array($ccs) && count($ccs))
                foreach ($ccs as $cc)
                    $message->cc($cc);
        });

        $json_request['status'] = TRUE;
        #$json_request['responseText'] = Input::all();

        return Response::json($json_request, 200);
    }

}

В этом файле много чего.. для меня не ясного. Подскажите, может в этом файле что-то поменять? Поставить свой адрес почты вместо dev@null.ru или вместо чего-то еще.. Заранее спасибо.
__________
И да... Конечно у меня каша в голове. Конечно у меня каша в сообщении выше, я толком не знаю что предоставить, чтобы было понятно о чем идет речь... Но ведь на то и форум? Если нужны какие-то другие файлы или часть кода - я предоставлю.
P.S. Гуглить пробовал. Маны читал/курил/учил матчасть и т.д. Но пока что это не дало эффекта.

Не в сети

#2 04.05.2016 18:27:39

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

Форма отправляется на app.order-billboard
Судя по контроллеру -
Route::any('/ajax/order-billboard', array('as' => 'app.order-billboard', 'uses' => __CLASS__.'@postOrderBillboard'));
обработчик формы - ApplicationController->postOrderBillboard()

вот собственно в нём что то и не работает, ковыряй,  смотри данные какие попадают

строка отправки письма -          Mail::send('emails.order-billboard', $data, function ($message) use ($data) { ...

также советую включить дебаг :
/app/config/app.php

        'debug' => true,

смотри в лог:
app/storage/logs/ тут файл или файлы в зависимости от настроек логирования

если нет какойто переменной - то ларавел бросает исключение, поэтому может и не отправляться

Не в сети

Подвал раздела