【问题标题】:How to display en error message when validation fails in PHP Laravel如何在 PHP Laravel 中验证失败时显示错误消息
【发布时间】:2021-10-23 01:59:47
【问题描述】:

我卡在表单验证中显示一条消息。

这是我的代码:

class InputController extends Controller
{
    public static function save(Request $request)
    {
        //Get input values to variables respectively
        $First_Name = $request->input('First_Name');
        $Last_Name = $request->input('Last_Name');
        $Email = $request->input('Email');
        $Credit_Card = $request->input('Credit_Card');
        $Password = $request->input('Password');

        //Rules for each field
        $rules = [
            'First_Name' => ['required', 'string'],
            'Last_Name' => ['required', 'string'],
            'Email' => ['required', 'string'],
            'Credit_Card' => ['required', 'string'],
            'Password' => ['required', 'string']
        ];

        //Validator variable
        $valid = Validator::make($request->all(),$rules);

        //Insert information into SQL table
        $customer = new CustomersTable;
        $customer->First_Name = $First_Name;
        $customer->Last_Name = $Last_Name;
        $customer->Email = $Email;
        $customer->Credit_Card = $Credit_Card;
        $customer->Password = Hash::make($Password);

        $customer->save();

        //If validation fails, pop out a message or else view localhost/submit
        if ($valid -> failed())
        {
            dd("Error! Some of the required information are empty");
        }
        else
        {
            return view('submit');
        }
    }
}

在下面:

if ($valid -> failed())
{
    dd("Error! Some of the required information are empty");
}
else
{
    return view('submit');
}

,当我让表单中的每个字段(First_Name,Last_Name,...)为空并单击按钮发布时,验证应该失败并且页面应该显示

"Error! Some of the required information are empty"

但是却弹出了SQL的错误:

SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'First_Name' cannot be null

,表示跳转到“else”语句。 谁能帮我解释一下?

【问题讨论】:

标签: php laravel validation


【解决方案1】:

您必须在插入数据之前输入此代码

if ($valid -> failed())
{
    dd("Error! Some of the required information are empty");
}

你的代码应该是

//Validator variable
    $valid = Validator::make($request->all(),$rules);
    if ($valid -> failed())
    {
        dd("Error! Some of the required information are empty");
    }
    else
    {
        //Get input values to variables respectively
        $First_Name = $request->input('First_Name');
        $Last_Name = $request->input('Last_Name');
        $Email = $request->input('Email');
        $Credit_Card = $request->input('Credit_Card');
        $Password = $request->input('Password');

        //Insert information into SQL table
        $customer = new CustomersTable;
        $customer->First_Name = $First_Name;
        $customer->Last_Name = $Last_Name;
        $customer->Email = $Email;
        $customer->Credit_Card = $Credit_Card;
        $customer->Password = Hash::make($Password);

        $customer->save();
        return view('submit');
   }

【讨论】:

    【解决方案2】:

    我认为这是因为您在验证之前将请求值分配给变量。试试这个:

    
    class InputController extends Controller
    {
        public static function save(Request $request)
        {
           
            $request->validate([
                'First_Name' => ['required', 'string'],
                'Last_Name' => ['required', 'string'],
                'Email' => ['required', 'string'],
                'Credit_Card' => ['required', 'string'],
                'Password' => ['required', 'string']
            ]);
    
    
            //Get input values to variables respectively
            $First_Name = $request->input('First_Name');
            $Last_Name = $request->input('Last_Name');
            $Email = $request->input('Email');
            $Credit_Card = $request->input('Credit_Card');
            $Password = $request->input('Password');
    
            //Insert information into SQL table
            $customer = new CustomersTable;
            $customer->First_Name = $First_Name;
            $customer->Last_Name = $Last_Name;
            $customer->Email = $Email;
            $customer->Credit_Card = $Credit_Card;
            $customer->Password = Hash::make($Password);
    
            $customer->save();
    
            //If validation fails, pop out a message or else view localhost/submit
            if ($valid -> failed())
            {
                dd("Error! Some of the required information are empty");
            }
            else
            {
                return view('submit');
            }
        }
    }
    
    

    【讨论】:

    • 如果您想在表单中显示错误消息,您可以通过刀片 @error 组件执行此操作,因此如果验证失败,用户重定向以提交显示错误的视图。
    • 我认为 $rules 中有一个 'require' 属性,所以当让所有字段为空时,验证总是会失败?
    【解决方案3】:
    if ($valid->fails())
    {
       return redirect()->back()->withErrors($valid)->withInput();
    }
    

    并在刀片模板中显示以下代码的错误

    @if ($errors->has('First_Name'))
        <span class="invalid-feedback">
            <strong>{{ $errors->first('First_Name') }}</strong>
        </span>
    @endif
    

    【讨论】:

      猜你喜欢
      • 2015-04-17
      • 2021-12-19
      • 2016-02-29
      • 2011-10-14
      • 1970-01-01
      • 2012-09-09
      • 2021-10-12
      • 2012-07-28
      • 2017-01-06
      相关资源
      最近更新 更多