使用 laravel 框架提交数据后清除表单输入

Posted

技术标签:

【中文标题】使用 laravel 框架提交数据后清除表单输入【英文标题】:form input cleared after submit data using laravel fram work 【发布时间】:2019-10-25 05:24:21 【问题描述】:

当我验证产品名称时我有多个数据库连接我发送消息product name is exist before 进行查看,这里出现了问题。

消息出现在视图中,但所有表单输入均已清除。 如果产品名称不存在,我如何恢复这个问题。验证正确执行,如果在验证中发现错误,它会正常显示并且表单输入未清除。 这是我的控制器代码。

public function add(Request $request)

    // start add
    if($request->isMethod('post'))
    

        if(isset($_POST['add']))
        
            // start validatio array
            $validationarray=$this->validate($request,[

                //'name'  =>'required|max:25|min:1|unique:mysql2.products,name|alpha',
                'name'  =>'required|alpha',
                'price' =>'required|numeric',

            ]);

            // check name is exist
            $query = dBHelper::isExist('mysql2','products','`status`=? AND `deleted` =? AND `name`=?',array(1,1,$validationarray['name']));
            if(!$query) 

                $product=new productModel();

                // start add
                $product->name = $request->input('name');
                $product->save();
                $add = $product->id;
                $poducten = new productEnModel();
                $poducten->id_product = $add;
                $poducten->name = $request->input('name');
                $poducten->price = $request->input('price');
                $poducten->save();
                $dataview['message'] = 'data addes';
             else 
                $dataview['message'] = 'name is exist before';
            
        
    

    $dataview['pagetitle']="add product geka";
    return view('productss.add',$dataview);

这是我的看法

@extends('layout.header')
@section('content')

    @if(isset($message))
        $message
    @endif

    @if(count($errors)>0)
        <div class="alert alert-danger">
            <ul>
              @foreach($errors->all() as $error)
                  <li>$error</li>

                  @endforeach

            </ul>

        </div>
        @endif

    <form role="form"  action="add" method="post" enctype="multipart/form-data">
        csrf_field()
        <div class="box-body">
            <div class="form-group$errors->has('name')?'has-error':''">
                <label for="exampleInputEmail1">Employee Name</label>
                <input type="text" name="name" value="Request::old('name')" class="form-control" id="" placeholder="Enter Employee Name">
            </div>

            <div class="form-group">
                <label for="exampleInputEmail1">Email Address</label>
                <input type="text" name="price" value="Request::old('price')" class="form-control" id="" placeholder="Enter Employee Email Address">
            </div>
        </div>
        <!-- /.box-body -->
        <div class="box-footer">
            <button type="submit" name="add" class="btn btn-primary">Add</button>
        </div>
    </form>

@endsection

这是我的路线

Route::get('/products/add',"produtController@add");
Route::post('/products/add',"produtController@add");

【问题讨论】:

将您的旧值从 Request::old('price') 更改为 old('price') 值得一试,这就是我使用它的方式,从来没有验证后出现空字段的问题。 【参考方案1】:

您可以创建自己的自定义验证函数,如下所示。我想这应该对你有所帮助。

从https://laravel.com/docs/5.8/validation#custom-validation-rules 找到它 -> 使用闭包

$validationarray = $this->validate($request,
        [
            'name'  => [
                'required',
                'alpha',
                function ($attribute, $value, $fail)  
                    //$attribute->input name, $value for that value.
                    //or your own way to collect data. then check.
                    //make your own condition.
                    if(true !=dBHelper::isExist('mysql2','products','`status`=? AND `deleted` =? AND `name`=?',array(1,1,$value)))                         
                           $fail($attribute.' is failed custom rule. There have these named product.');
                    
                ,          
            ],
            'price' => [
                'required',
                'numeric',
            ]        
        ]);

【讨论】:

@erkan ozkok,感谢您的赞赏。 :) 我按照您的指示添加了一些经验。虽然不知道,但它有没有帮助。【参考方案2】:

您可以手动抛出验证异常的第一种方式。 Here你可以找出你怎么知道的。

第二种方式(我推荐这个)你可以生成一个custom validation rule。顺便说一下,你的控制器方法会更干净。

【讨论】:

我尝试过进行自定义验证,但我停止了它,因为我怎样才能通过参数思想验证,如数据库名称、表名等。如果你能告诉我怎么做? @Erkan Özkök @hasan05 比我快 :)

以上是关于使用 laravel 框架提交数据后清除表单输入的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 重新提交表单验证仍然显示旧输入值

使用 setState 提交后清除表单输入

Laravel 输入类型搜索取消按钮提交表单

React - 表单提交后清除输入值

表单数据插入数据库后如何清除

在Angular 4中提交表单后清除输入框