【问题标题】:How to implement a PHP Form processing logic that is reusable?如何实现一个可重用的 PHP 表单处理逻辑?
【发布时间】:2015-04-20 11:09:57
【问题描述】:

我是 PHP 新手,我有很多 PHP 表单。表单使用标准的 HTML 输入字段,需要在服务器端进行验证。我该如何实现这一点,这样我就不必一遍又一遍地编写大量样板 HTML,而只需编写生成“完整表单”的最少量代码。实施此建议的方法是什么?谢谢。

【问题讨论】:

  • 当然,如果您有一个已经这样做的现有项目/框架的示例,那么这将是一个很好的答案。谢谢
  • 您可以使用模板引擎,然后您可以传递一些参数来告诉模板您想要在此页面中的表单字段。我在业务中使用的是Yaf引入的模板引擎。
  • This question 及其答案可能会对您有所帮助。

标签: php forms validation


【解决方案1】:

如果你更喜欢自己做,你至少应该做 PHP-Classes,这样可以避免重写(如果做得对;-))。通过 assoc 数组处理字段的属性,例如像这样:

<?php

   $form = new Form("MyInput", array ("submit" => "myform.php") );

   $form->AddField("input_text", array ("label" => "Your name") );

?>

要处理验证,您可以使用诸如

之类的属性
   $form->AddField("input_text", array (
        "label" => "Your name" , 
        "validate" => "required"
   ) );

只是示例,有很多与此相关的代码,您需要编写一次......

这应该对学习有用...

接下来,你可以使用 JS 来验证。请。请注意,JS 仅进行客户端验证,您不能依赖它被执行(用户可能在他的浏览器中关闭了 JS),因此您在接收数据时仍然必须在 PHP 中进行验证。 (您可以为此使用 JS-Libraries - 我使用过 Parsley 并且对此非常满意......)

如果您想跳过这种体验,请使用框架或模板引擎。

【讨论】:

  • 您好 MBaas,这看起来很棒!谢谢。您正在撰写有关框架和模板引擎的文章。您能否也详细说明它们,如果您知道一个,它确实像您在帖子中描述的那样工作,命名它们会很好。谢谢!
  • 感谢欧芹。这似乎很棒。到目前为止,我已经使用了 jqueryvalidation.org。但欧芹似乎很有前途。谢谢。
  • 嗨,蒂姆,我展示的代码的灵感来自于我作为合同的一部分为客户编写的内容——我为所有 HTML 控件实现了这样的控件,这相当多工作,但也非常有益,而且一遍又一遍地使用一个类这一事实最有帮助。 :) 如果您选择使用现有产品,Smarty(正如其他海报所提到的)是一个不错的选择(smarty.net)。而且框架数不胜数,我的建议是yiiframework.comlaravel.comsymfony.comframework.zend.com
  • 这些框架会以某种方式解决表单验证问题,因此您实际选择的内容可能还取决于您正在开发的应用程序...
  • 您好 MBaas,首先,非常感谢您的回答!它对我帮助很大!谢谢!您的回答确实是我正在寻找的:重点不在于验证,而是以尽可能少的代码重用 HTML 元素。我会研究这些框架,但据我所知,它们真的缺乏你的答案吗?它们不提供定义 HTML 元素的声明方式吗?但我会看看。 (看来我目前无法投票,我必须降低声誉,我会尽快投票)。谢谢!
【解决方案2】:

我建议创建一个表单模板。考虑使用一个方法(类View)

private static function capture($view_filename, array $view_data)
{   
    extract($view_data, EXTR_SKIP);

    ob_start();

    require $view_filename;

    return ob_get_clean();
}

并调用静态函数capture(注意:考虑使用__toString()打印对象)伪代码:

echo View::capture('template', array('id' => '1', 'class' => 'userForm', 'inputs' => array(0 => array('label' => 'Name', 'type' => 'text'), 1 => array('label' => 'Password', 'type' => 'password')));

【讨论】:

    猜你喜欢
    • 2010-10-10
    • 1970-01-01
    • 2022-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-14
    相关资源
    最近更新 更多