让按钮在不更改页面的情况下执行控制器方法 - Laravel

Make button do Controller method without changing page - Laravel

您好,我正在尝试制作一个按钮,点击后我会保存文本字段中写入的信息以及当前用户的登录 ID。 单击后只需刷新页面(或什么都不做)并将该信息保存在数据库中。

但是我的按钮什么也没做...

我的控制器:

public function addSchool(Request $request)
{
    DB::table('schools')->insertGetId([
        'id_professor' => Auth::id(),
        'escola' => $request->input('escola')
    ]);
        
    return redirect('/teacher');
}

我有文本字段和按钮的区域:

<div class="form-group">
    <h3 style="color: #000000" for="escola">Nome da Escola</h3>
    
    <input type="text" id="escola" name="escola" class="form-control">
</div>

<div>
    <button type="submit" class="btn btn-danger">Registar Escola</button
</div>

我没有在此处添加任何 web.php(路由文件),因为我不希望它转到任何页面。

这些是我的Database Columns

您无法使用没有路线的方法仅 PHP 进行保存。 如果您想这样做,请查看 livewire 组件,它允许您将 Javascript 与 PHP 一起使用。 但是你需要很少的人理解Javascript。 我建议您创建一个带有名称的路由,并将其指向方法

这里web.php Route::post('/post-form', [YourController::class, 'addSchool'])->name('addschool');

然后在你看来

<form action="{{route('addschool')}}" method="post">
    @csrf
    <div class="form-group">
        <h3 style="color: #000000" for="escola">Nome da Escola</h3>
        <input type="text" id="escola" name="escola" class="form-control"/>
    </div>
    <div>
        <button type="submit" class="btn btn-danger">Registar Escola</button>
    </div>
</form>

您可以通过 ajax 从前端调用附加到按钮的点击事件来实现。它会动态地将请求发送到您指定的控制器方法,您可以在前端指定位置显示响应(数据)而无需页面加载

例如看看给定的代码

    $.ajaxSetup({
      headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
      }
    });
    
    $(".btn-submit").click(function(e){
        e.preventDefault();
        var escola = $("input[name=escola]").val();
        $.ajax({
           type:'POST',
           url:'{{route('addschool')}}',
           data:{name:escola},
           success:function(data){
              alert(data.success);
//add your login here for the response
           }
        });
    });