Laravel не могу отправить JSON обьект на сервер

schel4ok

Новичок
друзья, помогите решить проблемку
у меня ларавел 5.3
при отправке POST реквеста со страницы calculator всё время получаю ошибку 500


в vue компоненте я делаю http запрос вот так
Код:
        methods: {
            submit:function(){
                    var formData = new FormData();
                        formData.append('ShowerType', this.ShowerTypeSelect.text);
                        formData.append('Glass', this.GlassTypeSelect.text);
                        formData.append('Dekor', this.DekorSelect.text);

                    this.$http.post('/calculator', formData)


            },
в результате на сервер отправляется такой массив
Код:
-----------------------------100693211531850
Content-Disposition: form-data; name="ShowerType"

Выберите тип кабины...
-----------------------------100693211531850
Content-Disposition: form-data; name="Glass"

Выберите тип стекла...
-----------------------------100693211531850
Content-Disposition: form-data; name="Dekor"

Выберите тип рисунка...
и потом ларавел ругается, что типа вместо объекта я ему подсовываю массив, а как отправить обьект я не знаю
ErrorException in CalculationDone.php line 19: Argument 1 passed to App\Notifications\CalculationDone::__construct() must be an instance of Illuminate\Http\Request, array given, called in D:\OpenServer\domains\boiler.new\app\Http\Controllers\Frontend\FrontendController.php on line 29 and defined





routes/web.php
Код:
Route::get('calculator', 'FrontendController@calculator')->name('calculator');
Route::post('calculator', 'FrontendController@calculated')->name('calculated');
app\Http\Controllers\Frontend\FrontendController.php
Код:
namespace App\Http\Controllers\Frontend;

use App\Notifications\CalculationDone;
use App\Models\Access\User\User;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;


class FrontendController extends Controller
{

   public function index()
   {
       return view('frontend.index');
   }

   public function calculator()
   {
       return view('frontend.calculator');
   }

   public function calculated(Request $request)
   {
       $result = $request->all();
       Notification::send(User::findOrFail(4), new CalculationDone($result));
   }

}


App\Notifications\CalculationDone.php
Код:
namespace App\Notifications;

use Illuminate\Http\Request;
use App\Models\Access\User\User;

use Illuminate\Bus\Queueable;
use Illuminate\Notifications\Notification;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\MailMessage;

class CalculationDone extends Notification
{
    use Queueable;
    protected $request;


    public function __construct(Request $request)
    {
        $this->request = $request->all();
    }


    public function via($notifiable)
    {
        return ['mail'];
    }


    public function toMail($notifiable)
    {
        return (new MailMessage)
                    ->subject('письмо с сайта')
                    ->from('[email protected]')
                    ->replyto('[email protected]')
                    ->line('Имя: '. $this->request['ShowerType'])
                    ->line('Телефон: '. $this->request['Glass'])
                    ->line('Желательное время звонка: '. $this->request['Dekor'])
                    ->line('Ваше сообщение отправлено. В ближайшее время мы с вами свяжемся.');
    }
 

fixxxer

К.О.
Партнер клуба
Хочешь json - так отправляй json, а не multipart/form-data. Я не знаю, что у тебя там за js-фреймворк, выясни, как отправлять json. Могу предположить, что достаточно передать вторым аргументом простой js-объект вместо инстанса FormData.

Это во-первых. Во-вторых:
Argument 1 passed to App\Notifications\CalculationDone::__construct() must be an instance of Illuminate\Http\Request, array given
$request->all() возвращает массив.
Вон видишь там в конструкторе CalculationDone у тебя еще раз делается $request->all()? Определись уж, массив ты туда передаешь или Request.
 
Последнее редактирование:

JOSS-PHP

Новичок
Fixxxer верно заметил.
Notification::send(User::findOrFail(4), new CalculationDone($result));
зачем ты тут подсунул массив ($result) если по сигнатуре там реквест? Передавай туда $request.
 

schel4ok

Новичок
получилось

в контроллере
Код:
    public function calculated(Request $request)
   {       Notification::send(User::findOrFail(1), new CalculationDone($request));   }

в Notification
Код:
    public function __construct(Request $request)
    {       $this->request = $request;    }
 

schel4ok

Новичок
Еще один вопрос есть. Почему-то flash_message появляется на странице только после того как я вручную перезагружу страницу либо перейду на другую страницу.
А мне кажется что так не должно быть

Код:
    public function calculated(Request $request)
   {
       Session::flash('flash_message','отправлено');
       Notification::send(User::findOrFail(1), new CalculationDone($request));
   }
 

fixxxer

К.О.
Партнер клуба
А мне кажется что так не должно быть
А как должно быть? Черной магией? Laravel - это как бы серверный фреймворк.

Что-то мне кажется, что тебе нужна эта ссылочка: http://phpfaq.ru/na_tanke

Если хочешь показывать javascript-ом, показывай самостоятельно javascript-ом.
 
Сверху