【问题标题】:Livewire : The POST method is not supported for this routeLivewire : 此路由不支持 POST 方法
【发布时间】:2021-07-19 16:18:27
【问题描述】:

我安装了 Laravel Livewire 并按照安装教程(包括脚本等)。

我有一个名为 /comparateur 的页面,它有一个表单,然后在同一页面上显示结果(sql 请求)。

我把livewire测试代码(计数器)放在https://laravel-livewire.com/docs/2.x/quickstart

第一个问题我没有看到用于递增计数器的字符“+”(可能是 css 冲突?)。

但真正的问题是:

The POST method is not supported for this route. Supported methods: GET, HEAD.

当我点击“+”时我有这个。

我的路线:

Route::get('/comparateur', function () {
    
    return view('comparateur');
})->name('comparateur');




Route::post('comparateur', 'ComparateurController@post')->name('comparateur');

app/http/livewire/counter.php:

<?php

namespace App\Http\Livewire;

use Livewire\Component;

class Counter extends Component
{
    public $count = 0;

    public function increment()
    {
        $this->count++;
    }

    public function render()
    {
        return view('livewire.counter');
    }
}

counter.blade.php:

<div style="text-align: center">
    <button wire:click="increment">+</button>
    <h1>{{ $count }}</h1>
</div>

路由/web.php

<?php

use Illuminate\Support\Facades\Route;

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

use App\Vpns;
use App\Blog;



Route::group([
    'prefix' => LaravelLocalization::setLocale(),
    'middleware' => [ 'localeSessionRedirect', 'localizationRedirect', 'localeViewPath' ]
],

 function()
{
    Route::get('/', function () {

        return view('welcome');



    });

     Route::group(['prefix' => 'laravel-filemanager', 'middleware' => ['web', 'auth']], function () {
         \UniSharp\LaravelFilemanager\Lfm::routes();
     });


    Route::get('go/{nameOfProduct}', ['as' => 'go.to' , 'uses' => 'VpnController@goTo']);


    Route::get('vpn/free', ['as' => 'vpn.free' , 'uses' => 'VpnController@free']);

        Route::get('vpn/tools', ['as' => 'vpn.tools' , 'uses' => 'VpnController@tools']);

     
    Route::resource('/vpn', 'VpnController')->name('*', 'vpn');

    Route::resource('/blog', 'BlogController')->name('*', 'blog');




    Route::get('/aboutvpn', function () {
        
        return view('vpn.about');
    });

    Route::get('/home', function () {
        
        return view('welcome');
    });


Route::get('/comparateur', Counter::class)->name('comparateur');


    Route::post('/comparateur', 'ComparateurController@post')->name('comparateur');





    Auth::routes();

    Route::get('logout', '\App\Http\Controllers\Auth\LoginController@logout');
    Route::group(['middleware' => ['auth']], function () { Route::get('/profile', function() { return view('profile'); }); });
    Auth::routes();

    Route::get('/home', 'HomeController@index')->name('home');

});

编辑:

终于找到了答案。因为本地化插件https://github.com/mcamara/laravel-localization#installation

它在 URL 上添加 /fr /pt /de 等,因此 /comparateur 页面不存在,但 /fr/comparateur 是。

但我不知道如何使网站正常运行

【问题讨论】:

  • php artisan route:clear 再试一次
  • 你能展示你的livewire组件代码吗?你也试过清除路由缓存吗?
  • 已经做了 php artisan route:clear : 仍然不工作/我更新了我的原始帖子。 + 文字显示还可以,只是在浅灰色上是白色的......

标签: laravel laravel-livewire


【解决方案1】:

要修复,替换

Route::get('/comparateur', function () {
    return view('comparateur');
})->name('comparateur');

use App\Http\Livewire\Comparateur;

...

Route::get('/comparateur', Comparateur::class)->name('comparateur');

您仍然可以使用控制器并渲染非 livewire 视图,然后如果您愿意,可以从那里包含组件的视图。

我实际上不确定您是否可以仅包含路线中的实时线视图,我从未尝试过。

至于帖子链接Route::post('comparateur', 'ComparateurController@post')-&gt;name('comparateur');,不需要,livewire会自己处理函数调用和更新视图,你只需要组件后端和视图。

更新

如果是本地化破坏它(由于 url),这行得通吗?

Route::get('/{language?}/comparateur', Counter::class)->name('comparateur');

【讨论】:

  • 我在 Livewire 中没有名为 Comparateur 的类。我只有一个柜台。我不明白...
  • 啊,好的。你应该有一个 php 文件(app\Http\Livewire)和一个刀片文件。你是如何生成组件的?我建议删除现有文件并运行php artisan make:livewire comparateur。我是否把comparateur 的东西走得太远了,你的组件实际上被命名为countercomparateur 只是为了成为路由的url/名称?
  • 是的。我按照你说的生成了counter组件,详情见livewire官网的基本使用教程
  • 还是不行吗?你能用routes/web.php的内容和组件的两个文件更新问题吗?
  • 我编辑了添加de routes/web.php的帖子,组件的其他文件已经在这里
【解决方案2】:

您的路线中的“/comparateur”似乎不等于“comparateur”

【讨论】:

    猜你喜欢
    • 2021-03-09
    • 2021-01-23
    • 2019-08-23
    • 2019-10-16
    • 2021-09-25
    • 2020-09-04
    • 1970-01-01
    • 2020-12-05
    • 2020-04-13
    相关资源
    最近更新 更多