【问题标题】:Form POST request not captured by Laravel 7 routeLaravel 7 路由未捕获表单 POST 请求
【发布时间】:2020-05-13 20:49:14
【问题描述】:

我有一个通过 POST 将数据发送回 Laravel 的表单。问题是我创建的路由没有捕获 POST。我得到一个 404。

表格

        <form  action="/articles" method="post">

        <div class='field'>
            <label class='label' for='title'>Title</label>

            <div class='control'>
                <input class='input' type='text' name='title' id='title'>
            </div>
        </div>

        <div class='field'>
            <label class='label' for='excerpt'>Excerpt</label>

            <div class='control'>
                <textarea class='textarea' name='excerpt'  id='excerpt'></textarea>
            </div>
        </div>

        <div class='field'>
            <label class='label' for='body'>Body</label>

            <div class='control'>
                <textarea class="textarea" name='body' id='body'></textarea>
            </div>
        </div>

        <div class='field is-grouped'>
            <div class='control'>
                <button class='button is-link' type='submit'>Submit</button>
            </div>
        </div>
    </form>

我的路线文件:

    <?php

use Illuminate\Support\Facades\Route;


Route::get('/articles', 'ArticlesController@index');
Route::post('/articles', 'ArticlesController@store');
Route::get('/articles/create', 'ArticlesController@create');

我尝试了各种动作和方法的变化,但我总是得到404。

知道我做错了什么吗?

【问题讨论】:

  • 你说你尝试过各种变体,但是你具体尝试过什么?您是否尝试过使用 url() 助手? action="{{ url('/articles') }}"?您是否尝试过命名路线? Route::post('/articles', ...)-&gt;name('articles');action="{{ route('articles') }}"?另外,请注意,您需要在 &lt;form&gt; 中使用 CSRF 令牌来使用 POST 方法:{{ csrf_field() }}
  • 我尝试了较长的 URL,例如“/public/articles”,我将 POST 替换为 GET。但是您建议使用 URL 辅助函数解决了这个问题。谢谢。你知道为什么“/articles”不起作用吗?我从 laracast.com 的“Laravel from scratch”视频中复制了它。
  • 是的!为你发布一个快速答案,1 秒。

标签: laravel post


【解决方案1】:

当您使用action="/articles" 时,您会得到所谓的“相对路径”,即它会尝试将/articles 附加到您当前的URL 上。查看您的路线,这意味着它正在尝试 POST

http://localhost:8000/articles/create/articles

url() 帮助器创建一个“绝对路径”,它没有歧义,并产生正确的 URL:

http://localhost:8000/articles

注意:您的 URL 可能是不同的主机,但逻辑仍然适用。

【讨论】:

  • 蒂姆,谢谢您的回复。我已经怀疑它与“当前文件夹”有关。但是我仍然没有得到的是如何确定放在“文章”之前的路径?它是定义表单的php文件的位置吗?或者它是 Laravel 项目的根源?还是其他方式?
  • 这是您当前的网址。如果您从http://localhost/articles/create 提交表单,并使用/articles 操作,它将发布到的完全限定URL 是http://localhost/articles/create/articles。这就是为什么您需要由 url() 帮助程序生成的绝对 URL。在这种情况下与文件夹无关 :) 路径是指 URL 路径,而不是文件夹路径。
  • 克利尔现在。谢谢。休伯特
猜你喜欢
  • 1970-01-01
  • 2018-08-05
  • 2021-08-31
  • 2021-12-03
  • 1970-01-01
  • 1970-01-01
  • 2019-06-27
  • 2019-04-13
  • 2020-11-24
相关资源
最近更新 更多