Laravel 表单提交到另一个页面

Posted

技术标签:

【中文标题】Laravel 表单提交到另一个页面【英文标题】:Laravel form submitting goes to another page 【发布时间】:2020-10-22 02:54:14 【问题描述】: 我是`Laravel`的初学者。我正在 Laravel 中创建一个管理面板。我通过 id(编辑页面)从数据库中获取数据。在我的编辑页面中,我的表单提交不正确。我的意思是表单的 `action` 属性没有设置好。等等,这是我的代码: `View.blade.php`
<div class="card chapterCard">
        <div class="card-body">
            @foreach($data as $chapter)
               // See this in action
                <form method="POST" action=" action('ChaptersController@store') ">
                    @csrf
                    <h2 class="h2-responsive text-center">Edit Chapter</h2>
                    <div class="form-group row">
                        <div class="col-md-12">
                            <div class="md-form">
                                <label for="chapterName">Chapter Name</label>
                                <input type="text" name="chapterName" id="chapterName" class="form-control" value=" $chapter->chapter ">
                            </div>
                        </div>
                        <div class="col-md-12">
                            <div>
                                <button type="submit" class="btn btn-primary btn-block">Save</button>
                            </div>
                        </div>
                    </div>
                </form>
            @endforeach
        </div>
    </div>

Route

Route::prefix('/admin')->group(function () 

    Route::get('/chapters/sahih_bukhari/edit/chapter_number', 'ChaptersController@editSahihBukhari')->name('edit_chapter_sahih_bukhari');
    
);
// For edit Form
Route::post('store', 'ChaptersController@store');

ChaprtersController.php

class ChaptersController extends Controller

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct() 
        $this->middleware('auth');
    

    public function editSahihBukhari($chapter_number) 
        $chapter = Chapters::where([
                ['chapter_number', $chapter_number],
                ['source', 'Sahih Bukhari']
            ])->get();
        return view('edit_chapter_sahih_bukhari', ['data' => $chapter]);
    

   // For Edit Form
    public function store(Request $request) 
        print_r($request->input());
    

当我单击提交以检查它是否正常工作时,它会将我重定向到http://localhost:8000/store。这意味着它转到另一个页面。但我希望它在提交后不要转到另一个页面,它应该保持在同一页面上。我不知道我做错了什么。我用谷歌搜索了很多,我找到了很多答案,但他们都在这样做“提交后,它会转到另一个页面”但我希望它保持在同一页面上。请帮帮我,怎么办。我被卡住了

【问题讨论】:

您的表单是 POST 表单 (w3schools.com/tags/ref_httpmethods.asp),默认情况下通常会导致页面发生更改。这可能会有所帮助:***.com/questions/19454310/…。 “基本上,包括 event.preventDefault();” 这不是我问题兄弟的答案。提交后我想要的东西,它应该保存数据等,并且它应该在提交后保持在同一页面上,就像我们在简单的 php 中所做的那样? 在简单的 PHP 中,它停留在同一页面上的原因是它不使用 POST 提交表单,而是使用 PHP 脚本处理表单提交。如果您无法使用 PHP 脚本处理表单,另一个选项是使用 AJAX 表单提交。如果您不能使用 PHP 脚本或 AJAX 表单提交,则必须像现在一样进行 POST 并重定向。 【参考方案1】:

你做到了:

public function store(Request $request) 
        print_r($request->input());

这将为您提供输入数据的输出,而不是重定向。

所以你需要这样做:

public function store(Request $request) 
        // do what you want, like save data to db
       return redirect('home/dashboard'); // after save data to db, it will redirect you to home/dashboard page, It will redirect on server side not client side

【讨论】:

伙计,我不想重定向。有什么办法让它保持在同一页面上?我的意思是,路由器有问题或其他原因。 是的,如果您愿意,您可以发送用户查看return view('home/dashboard');,您可以发送带有它的测量,例如return redirect('home/dashboard')-&gt;with('message', 'Your data submitted successfully'); 对于同一页面,您可以这样做:return redirect()-&gt;back(); 发送消息return redirect()-&gt;back()-&gt;with('message', 'Submitted Successfully'); 而不是使用redirect('home/dashboard');,使用redirect()-&gt;back() 不是很好吗?...因为它是重定向回来的,我的页面是按id 的,所以对我有好处。但是我如何使用redirect()-&gt;back() 发送消息? 你需要像***.com/a/36709439/4575350那样得到message【参考方案2】:

在您的章节控制器中:

public function store(Request $request) 
    print_r($request->input());
return redirect()->back(); //redirects the user back to the page, you can play with it however you want

更多关于重定向的信息: https://laravel.com/docs/7.x/redirects

【讨论】:

我猜这很好,但不是正确的方式。因为它正在返回旧页面。它不应该先转到另一个页面,所以我不必返回。伙计,简单的 php 保持在同一页面上。而laravel没有,为什么?没看懂 只有当您使用 Ajax 提交表单时,它才会重定向。 那为什么简单的 php 会停留在同一页面上呢?我认为这是因为路线,因为它正在改变网址。不能是route ::post中的同一个url吗? 我不明白你的意思,你正在提交信息并将其发送到 ChaptersController@store 并且商店正在显示你所写的打印内容。如果您不想显示任何内容,请不要打印。【参考方案3】:
Route::prefix('/admin')->group(function () 

    Route::get('/chapters/sahih_bukhari/edit/chapter_number', 'ChaptersController@editSahihBukhari')->name('edit_chapter_sahih_bukhari');
    
    Route::post('/chapters/sahih_bukhari/edit/chapter_number', 'ChaptersController@store')->name('post_chapter_sahih_bukhari');;
);

【讨论】:

在同一个端点发布和获取,或者添加 Route::post('/chapters/sahih_bukhari/edit/chapter_number', 'ChaptersController@store')->name('somepost') ;并使用 action="route('somepost')"

以上是关于Laravel 表单提交到另一个页面的主要内容,如果未能解决你的问题,请参考以下文章

提交表单后,Laravel 将 ID 从一个表插入到另一个表

将表单数据提交到另一个 php 页面,但将结果显示回提交表单的同一页面?

提交表单后重定向到另一个页面?

Ajax表单提交后如何将用户重定向到另一个页面

Ajax 表单提交后如何将用户重定向到另一个页面?

表单提交后PHP重定向到另一个页面