Сообщение формы Laravel - MethodNotAllowedHttpException

Я пытаюсь отправить форму в базу данных, но получаю следующую ошибку

Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException thrown with message

Форма предварительно заполнена данными и предназначена для почтового маршрута. Из исследования я выяснил, что проблема связана с отправкой сообщения на маршрут получения, но маршрут, на который я нацелен, - это сообщение.

Форма

 <form action = "/account/tenancy/{{$user->id}/" method = "POST">
              {{ csrf_field() }}
              <div class = "row">
                <div class = "col-md-6">
                  <label for = "property_address">Property Address</label>
                </div> <!-- ./col6 -->
              </div> <!-- ./ row-6 -->
              <div class = "row">
                <div class = "col-md-10">
                  <select class = "form-control" id = "property_address" name = "property_address">
                    <!--Gets all counties from DB -->
                    @foreach ($properties as $property)
                      <option value = {{$property->id}}>{{$property->address . ', ' . $property->town . ', ' . $property->county}}</option>
                    @endforeach
                  </select>
                </div> <!-- ./ col-6-->
              </div> <!-- ./ row-5  -->
              <div class = "row mt-2">
                <div class = "col-md-6">
                  <label for = "landlord-name">Landlord Name</label>
                </div> <!-- ./col=6 -->
              </div> <!-- ./ row-4-->
              <div class = "row">
                <div class = "col-md-6">
                  <select class = "form-control" name = "landlord-name">
                    <option value = "{{Auth::user()->name}}">{{Auth::user()->name}}</option>
                  </select>
                </div> <!-- ./ row 3-->
              </div> <!-- ./col-3 -->
              <div class = "row mt-2">
                <div class = "col-md-6">
                  <label for = "tenand-name">Tenant Name</label>
                </div> <!-- ./col=6 -->
              </div> <!-- ./ row-4-->
              <div class = "row">
                <div class = "col-md-6">
                  <select class = "form-control" name = "tenant-name">
                    <option value = "{{$user->name}}">{{$user->name}}</option>
                  </select>
                </div> <!-- ./ row 3-->
              </div> <!-- ./col-3 -->
              <button class = "mt-2 btn btn-primary" type = "submit">Create Tenancy</button>
            </form> <!-- ./form -->

Метод контроллера

  //Renders Form
  public function create($id){
    $user = User::where('id', $id)->first();
    $properties = PropertyAdvert::where('user_id', Auth::id())->get();

    return view('/pages/account/tenancy/create', compact('user', 'properties'));
  }

  //Stores data
  public function store(Request $request){
    $Tenancy = Tenancy::create([
      'tenant_id' => $request->user_id,
      'landlord_id' => Auth::id(),
      'property_address' => $request->property_address
    ]);

    return back();
  }

Модель аренды

class Tenancy extends Model
{
    protected $fillable = ['tenant_id', 'landlord_id', 'property_address', 'accepted'];

    public function user(){
        return $this->belongsTo('App\User');
      }
}

Маршруты

Сообщение формы Laravel - MethodNotAllowedHttpException

Эта ошибка обычно означает, что что-то не так с вашим определением маршрута. Можете показать, как вы объявляете свой маршрут в web.php?

Gacek 27.04.2018 13:44

Вероятно, проблема в маршрутизации. Вставьте определения маршрута, а также результат, полученный от php artisan route:list.

Torkil Johnsen 27.04.2018 13:49

Добавлено как изображение

user9409047 27.04.2018 13:51

В действии формы замените {id} на {{id}}. Надеюсь решит проблему.

Jinandra Gupta 27.04.2018 14:09

Нет, это не работает. Хммммм

user9409047 27.04.2018 14:36

Вам нужно передать идентификатор в свое представление создания.

Jason Houle 27.04.2018 14:39

Я использую идентификатор пользователя. Которая уже передана через пользователя

user9409047 27.04.2018 14:42

Хорошо, но раньше здесь не говорилось "пользователь". Теперь у вас синтаксическая ошибка. {{$ user-> id} должно быть {{$ user-> id}}. Вам не хватает закрывающей фигурной скобки.

Jason Houle 27.04.2018 14:45

Это просто опечатка. В файле все нормально. Неважно, что я изменяю, это вызывает ту же ошибку. Есть ли проблема в методе магазина?

user9409047 27.04.2018 14:47

Чтобы объяснить проблему более подробно, не отображается идентификатор, который дает вам URL-адрес / account / tenancy /, который вы, вероятно, определили только как маршрут GET. Проверьте созданный HTML-код, чтобы убедиться, что к URL-адресу добавлен идентификатор.

Jason Houle 27.04.2018 14:48
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
10
995
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы используете неправильный метод. В соответствии с вашими маршрутами измените метод в вашей форме на GET.

Но он отправляет данные в базу данных, поэтому это должен быть пост

user9409047 27.04.2018 14:37

Так что измени свой маршрут

GabMic 27.04.2018 17:06
<form action = "/account/tenancy/{{id}}" method = "POST">

Попробуй это

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Tenancy extends Model
{
    protected $table = 'tenancy';
    --------------------
    --------------------
}

Удалите косую черту после / {{id}} и убедитесь, что вы определили имя таблицы в модели.

Нет, этого не произошло.

user9409047 27.04.2018 14:37

Удалите косую черту после {{id}} и попробуйте / {{id}}. Для проблемы с именем таблицы я использую файл модели в качестве примера.

Jinandra Gupta 27.04.2018 15:39
Ответ принят как подходящий

Удалите косую черту с конца URL-адреса в действии формы:

<form action = "/account/tenancy/{{id}}" method = "POST">

Используйте: /account/tenancy/{{id}} вместо /account/tenancy/{{id}}/

и попробовать.

Это решило проблему. Теперь я получаю еще одну ошибку. Но, по крайней мере, прогресс> Базовая таблица или представление не найдены: 1146 Таблица «rentable.tenancies» не существует

user9409047 27.04.2018 14:56

как называется ваш стол?

Muthu17 27.04.2018 14:57

имя вашего стола должно быть «арендованные». Если нет, перезапишите имя вашей таблицы в модели. например, protected $ table = '***********';

Muthu17 27.04.2018 14:58

Таблис назывался арендатором. У меня нигде не определены условия аренды afaik

user9409047 27.04.2018 15:00

Как я уже упоминал выше, замените имя вашей таблицы в модели. например, protected $ table = 'tenancy';

Muthu17 27.04.2018 15:01

В Laravel имя модели должно быть в единственном числе, а имя таблицы - во множественном числе.

Muthu17 27.04.2018 15:02

В противном случае есть возможность жестко привязать вашу таблицу к модели, как указано выше.

Muthu17 27.04.2018 15:03

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