簡體   English   中英

Laravel 表單提交后如何重定向到另一個頁面

[英]How do I redirect to another page after form submission in Laravel

形式

當我提交表單時,它會重定向回表單本身,有人可以幫助我嗎?

    <form action="/jisajili" method="POST">
        @csrf
        <div class="card-panel z-depth-5">
            <h5 class="center red-text">Jiunge Nasi</h5>

            <div class="input-field">
                <i class="material-icons prefix">account_circle</i>
                <input type="text" name="username" class="validate">
                <label>Jina lako</label>
            </div>

            <div class="input-field">
                <i class="material-icons prefix">phone</i>
                <input type="number" name="phone" class="validate">
                <label>Nambari ya simu</label>
            </div>

             ....

            </p>
            <input type="submit" name="submit" value="Jiunge" class="btn left col s12 red">

Controller

class registration extends Controller{

     public function create(){
         return view('jisajili.jiunge');
     }

     public function store(Request $request){
         $reg = new regist;

         $reg->jina = $request->input('username');
         $reg->simuNumber = $request->input('phone');
         $reg->email = $request-> input('email');
         $reg -> password = bcrypt($request->input('password'));
         $cpassword = $request -> input('cpassword');

         $reg->save();

         $validated = $request->validate([
             'name' => 'required|unique:posts|max:10',
             'body' => 'required',
         ]);
         
         return redirect('home');
         
     }
}

我要做的是在將 object 添加到數據庫之前首先檢查數據要求。 此外,我會將模型的列添加到 Model 文件中,以使用帶有數組參數的Object::create function。

我建議在刀片文件中使用路由。 我注意到你使用了action="/route" 您要做的是在路由文件中使用->name('route_name')命名您的路由。 通過全局路由 function route="{{ route('route_name') }}"在刀片文件中使用它們。

<?php

class PostController extends Controller
{
    public function index()
    {
        return view('post.create');
    }

    public function store(\Illuminate\Http\Request $request)
    {
        $validator = Validator::make(
            $request->all(),
            [
                'name' => 'required|unique:posts|max:10',
                'body' => 'required'
            ]
        );

        // Go back with errors when errors found
        if ($validator->fails()) {
            redirect()->back()->with($validator);
        }

        Post::create(
            [
                'name' => $request->get('name'),
                'body' => $request->get('body')
            ]
        );

        return redirect()
            ->to(route('home'))
            ->with('message', 'The post has been added successfully!');
    }
}

之后你可以做的是將自定義錯誤添加到 controller 或將它們添加到你的刀片文件中。 您可以在Laravel 的文檔中找到更多相關信息。

由於驗證錯誤,它會將您重定向回來。

如 laravel 文檔https://laravel.com/docs/7.x/validation#rule-confirmed中所述,將密碼確認名稱從cpassword更改為password_confirmation

將您的 controller 更新為:

public function store(Request $request){

         $validated = $request->validate([
             'username' => 'required',
             'phone' => 'required',
             'email' => 'required',
             'password' => 'required|confirmed'
         ]);

         $reg = new regist;
         $reg->jina = $request->input('username');
         $reg->simuNumber = $request->input('phone');
         $reg->email = $request-> input('email');
         $reg -> password = bcrypt($request->input('password'));

         $reg->save();
         return redirect('home');
         
     }

在您的刀片中添加以下內容以顯示驗證錯誤:

@if ($errors->any())
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{{ $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM