Проблема с маршрутами в Laravel и Page не найдена

У меня есть контактная форма во всплывающем окне, но когда я нажимаю кнопку «Отправить», страница не найдена, а не перенаправляет меня на домашнюю страницу.

это мой маршрут

Route::post('/contact_us','HomeController@contact_us')->name('contact_us');

Функция в HomeController.php

public function contact_us(Request $request)
{ 
    $validator=Validator::make($request->all(), [
        'name' => 'required',
        'phone' => 'required',
        'email' => 'required|email'
    ]);

    if ($validator->fails())
    {

      Session::flash('error', "join_us");
      return back()->withInput()->withErrors($validator, 'contact');
    }
    $data = array(
        'name' => $request->name,
        'email'  => $request->email,
        'phone'  => $request->phone,
        'created_at' => date('Y-m-d h:i:s'),
        ); 
    $email=$request->email;

     DB::table('application_from')->insert($data); 

    return Redirect::to('/')->with('message', 'Application added successfuly');
}    

И форма открылась и закрыла теги

{{Form::open(array('route'=>'contact_us','method'=>'post'))}}

..... form inputs

{{Form::close()}}

Когда я нажимаю «Отправить», я получаю

Not Found

The requested URL /contact_us was not found on this server.

Почему пытается загрузить этот URL, когда он должен перезагрузить домашнюю страницу?

ОБНОВЛЕНИЕ с формой

<div class = "modal-body">
    {{Form::open(array('route'=>'contact_us','method'=>'post'))}}
         <div class = "form-group {{ $errors->contact->has('name') ? 'has-error' : '' }}">
              @if ($errors->contact->has('name'))
                  <span class = "small text-danger ">
                      <b>{{ $errors->contact->first('name') }}</b>
                  </span>
              @endif
              <input type = "text" name = "name" class = "form-control" placeholder = "Name" >
         </div>
         <div class = "form-group {{ $errors->contact->has('email') ? 'has-error' : '' }}">
              @if ($errors->contact->has('email'))
                  <span class = "small text-danger ">
                     <b>{{ $errors->contact->first('email') }}</b>
                  </span>
              @endif
              <input type = "text" name = "email" class = "form-control" placeholder = "Email" >
         </div>
         <div class = "form-group {{ $errors->contact->has('phone') ? 'has-error' : '' }}">
              @if ($errors->contact->has('phone'))
                   <span class = "small text-danger ">
                        <b>{{ $errors->contact->first('phone') }}</b>
                   </span>
              @endif
              <input type = "text" name = "phone" class = "form-control" placeholder = "Phone" >
         </div>
         <div class = "form-group text-center">
              <button type = "submit" class = "btn btn-custom btn-sm btn-block">Submit</button>
         </div> 
         {{Form::close()}}
 </div>

ОБНОВЛЕНИЕ 2: функция отправки почты

Mail::send('contact_us_email', $data, function($message) use ($email){
            $message->to($email)->subject('Site')->cc('[email protected]');
            $message->from('[email protected]');
});

Не могли бы вы показать полную форму.

Kamal Paliwal 15.03.2019 08:22

Вы пробовали использовать Route::post без /?

Guga Nemsitsveridze 15.03.2019 08:26

Что-то вроде этого: Route::post('contact_us','HomeController@contact_us')->name(‌​'contact_us');

Guga Nemsitsveridze 15.03.2019 08:27

Обновлено с полной формой

Ivanov 15.03.2019 08:27

@GugaNemsitsveridze, пробовал без / -> не нашел

Ivanov 15.03.2019 08:50

Это может быть глупым решением, но что, если вы попытаетесь использовать простое перенаправление php? header("location:/") ? Вы можете установить такие параметры, как header("location:/" . $_SERVER["something"]

Guga Nemsitsveridze 15.03.2019 08:58

Пробовал вот так $home = 'header("location:/" . $_SERVER["something"]'; и в конце return $home; все же The requested URL /contact_us was not found on this server.

Ivanov 15.03.2019 09:01

Ладно, думаю, я нашел часть проблемы. По крайней мере, если страница не найдена на сервере. Я изменил маршрут на Route::post('/','HomeController@contact_us')->name('contact_‌​us');. Теперь страница перезагружается в обычном режиме, но письмо по-прежнему не получено.

Ivanov 15.03.2019 10:08
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
5
8
108
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Пожалуйста, поделитесь полным кодом forms

я проверил ваши function и form и routes ошибок нет

Я думаю, что данные из формы смотрят в database, но redirecting после магазина выдает ошибку

I am not daam sure but may be

Так что попробуйте изменить

ОТ

 return Redirect::to('/')->with('message', 'Application added successfuly');

К

return redirect()->back()->with('message','Application added successfuly');

А также ОТ

{{Form::open(array('route'=>'contact_us','method'=>'post'))}}

К

  {!! Form::open(['route' => ['contact_us']]) !!}
  @method('POST')

Пробовал оба, но так и не нашел.

Ivanov 15.03.2019 08:47

Также я пробовал без сохранения в базе данных, например. прокомментировал строку, в которой он хранится - все то же самое.

Ivanov 15.03.2019 08:51

Кажется, вам не хватает csrf-token в форме. Добавьте поле csrf в форму, как показано ниже:

<input type = "hidden" name = "_token" id = "csrf-token" value = "{{ Session::token() }}" />

ИЛИ

{!! Form::token() !!}

Надеюсь, это решит вашу проблему.

эй, чувак, это не проблема, если _token не найден в HttpRequest, он выкинет 419 с Sorry Your session has expired message

ManojKiran Appathurai 15.03.2019 08:42

Спасибо, но токен не проблема, и да, он выдает не найденный URL

Ivanov 15.03.2019 08:49

@Manojkiran.A да, он выдает 419, но недавно в проекте была сделана некоторая настройка, и он выдавал 404 из-за токена.

Kamal Paliwal 15.03.2019 09:45

@Ivanov проблема возникает, когда вы отправляете форму или когда она перенаправляется после успешной отправки?

Kamal Paliwal 15.03.2019 09:46

@KamalPaliwal, я не знаю, как вы разделяете эти два действия. Я имею в виду, что я нажимаю кнопку Submit и вижу новую страницу site.com/contact_us, которая не найдена на сервере.

Ivanov 15.03.2019 09:53
Ответ принят как подходящий

Чтобы ответить на вашу проблему с электронной почтой

попробуйте добавить следующее в файл .env

# For Localhost Email
MAIL_DRIVER=smtp
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=587
[email protected]
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=tls

# For Hosting Email
MAIL_DRIVER=sendmail
MAIL_HOST=smtp.googlemail.com
MAIL_PORT=465
[email protected]
MAIL_PASSWORD=mypassword
MAIL_ENCRYPTION=ssl

эти учетные данные предназначены для электронной почты на основе Gmail, не забудьте выполнить следующие действия:

  1. Перейдите в свою учетную запись Google.
  2. На левой панели навигации щелкните Безопасность.
  3. В нижней части страницы на панели доступа к менее безопасным приложениям нажмите Включить доступ.

Я думаю, что нашел часть проблемы. Потому что такой страницы на самом деле нет contact_us и я изменил маршрут на Route::post('/','HomeController@contact_us')->name('contact_‌​us');. Теперь страница перезагружается в обычном режиме, но письмо по-прежнему не получено.

Ivanov 15.03.2019 10:23

измените его на Route::post('/contact_us','HomeController@contact_us')->name‌​('contact_us'), если вы все еще хотите сохранить содержимое атрибута действия в своей форме

user6940918 15.03.2019 10:29

Нет, это не проблема, какой URL на самом деле. Функция отправки электронной почты есть

Ivanov 15.03.2019 10:34

могу я увидеть ваш код для отправки электронной почты? это не входит в вопрос

user6940918 15.03.2019 10:35

Я отредактировал свой ответ, чтобы он соответствовал вашему вопросу об электронном письме.

user6940918 15.03.2019 10:52

Другие вопросы по теме