代码之家  ›  专栏  ›  技术社区  ›  nowox

如何在Laravel或其他框架中正确地编写表单?

  •  2
  • nowox  · 技术社区  · 6 年前

    validation Laravel Collective . 我觉得这些方法非常麻烦,因为验证是在不同级别进行的:

    • 数据库验证(外键约束、列类型)
    • set...Attribute 方法)
    • 请求特征验证
    • Bootstrap )

    例如,我想写一个带有国家选择器的表单。我的数据库有一个 VARCHAR(2) 列接收国家代码。我得写这封信 setCountryAttribute 方法对我的模型进行验证值与公认的国家。然后我要写一份申请表 php artisan make:request StoreCustomerPost setCountryAttribute属性 代码。最后,我不得不编写一些JavaScript来在客户端进行验证。

    在大型应用程序的每种形式的每个领域都这样做是不可接受的。

    我要找的是一个更优化的解决方案,其中涉及元编程。例如,我可以使用工具箱工厂来生成所有fronend HTML,包括JS验证代码、请求验证和模型验证。

    让我们以一个 age

    "age": {
        "type": "textfield",
        "name": "age",
        "validation": {
            "type": "integer"        
            "pattern": "/\d{1,2}|1\d{2}/",
            "minValue": 0,
            "maxValue": 122,
        },
        "view": {
            "template": "form.fields.textfield",    
            "placeholder": "Age",
            "size": "10em",
            "title": "Age",
            "validation": true
        }
    }
    

    这些信息足以动态生成:

    • 模型验证 setAgeAttribute setAttribute 特质法。
    • 前端代码。

    因此,在我的控制器中,我期待的是:

    public function edit($id) {
        $form = Form::fill(Customer::find($id))
            ->field('age');
            ->field('firstname');
            ->field('lastname');
    
        return view('customers.edit', ['form' => $form->toBlade()]);
    }
    

    2 回复  |  直到 6 年前
        1
  •  1
  •   common sense    6 年前

    我要找的是一个更优化的解决方案,其中涉及元编程。例如,我可以使用工具箱工厂来生成所有fronend HTML,包括JS验证代码、请求验证和模型验证。

    我感觉到你的痛苦:-)虽然这个问题有点宽泛,因为如果有,很难回答 在某处 你描述的这个工具。至少我没听说过。

    在我使用Laravel之前,我和MeteorJS合作过一个大项目,他们有着令人敬畏的 Collection 2 package 我在拉雷维尔深深地怀念着。但是我认为如果你只需要处理后端和前端的一种语言,要比使用两种语言更容易处理。

        2
  •  1
  •   online Thomas    6 年前

    先想几句:

    • 并不是所有用于验证的PHP函数都有Javascript和vica中的对应函数。 Not even regex behaves the same

    • 您可以只使用xhr(ajax)调用来进行laravel验证,但是我同意最好通过客户端验证来防止对服务器的不必要调用。

    • 我们可以创建自己的库,试图反映当前对js的Laravel验证的可能性。

    • 有一种即将出现的技术叫做 webassembly which might make it possible to use PHP in the browser 并以这种方式构建一个更兼容的前端验证。当然,这种前端语言仍然受到浏览器API的限制。