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')->with('message', 'Your data submitted successfully');
对于同一页面,您可以这样做:return redirect()->back();
发送消息return redirect()->back()->with('message', 'Submitted Successfully');
而不是使用redirect('home/dashboard');
,使用redirect()->back()
不是很好吗?...因为它是重定向回来的,我的页面是按id 的,所以对我有好处。但是我如何使用redirect()->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 从一个表插入到另一个表