如何实现可重用的PHP表单处理逻辑?

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

展开原文

原文

I am new to PHP and I have a lots of forms in PHP. The forms make use of the standard HTML Input fields and need to be validated on the serverside. How can I implement this, so that I do not have to write lots of boilerplate HTML over and over again, rather only write the minimal amount of code that generate the "full forms". What is the recommended approach to implement this? Thanks.

douwen3973
douwen3973 这个问题及其答案可能对您有所帮助。
5 年多之前 回复
dongyi7901
dongyi7901 您可以使用模板引擎,然后您可以传递一些参数来告诉模板您在此页面中需要哪些表单字段。我正在使用Yaf在业务中引入的模板引擎。
5 年多之前 回复
drlu11748
drlu11748 当然,如果你有一个现有项目/框架的例子已经做到了这一点,那么这也就是答案。谢谢
5 年多之前 回复

2个回答

If you prefer to do it all yourself, you should at least do it PHP-Classes which will save you from re-writing (if done right ;-)). Handle attributes of the fields through an assoc array, e.g. like this:

<?php

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

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

?>

To handle validation, you could use attributes such as

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

(Only examples, there's a lot of code releated to this which you'd need to write once...)

That should be useful for learning purposes...

Next, you could use JS to validate. Pls. note that JS does client-side validation only and you cannot rely on it being executed (user might have turned of JS in his browser), so you still MUST validate in PHP when receiving the data. (And you could use JS-Libraries for that - I've used Parsley and was quite happy with it...)

If you want to skip that experience, use Frameworks or Templating Engines.

duanmibei1929
duanmibei1929 谢谢蒂姆 - 很高兴我可以帮忙:-)
5 年多之前 回复
duanlei7101
duanlei7101 你好MBaas,首先,非常感谢你的回答! 它对我帮助很大! 谢谢! 你回答的确实是我正在寻找的:重点不在于验证,而是以尽可能少的代码重用HTML元素。 我将研究框架,但据我所知,他们真的缺乏你的答案是什么? 它们不提供定义HTML元素的声明方式? 但我会看看。 (似乎我现在不能投票,我必须尽可能少声名,我会尽快)。 谢谢!
5 年多之前 回复
duanlun2827
duanlun2827 这些框架将以某种方式解决表单验证问题,因此您实际选择的内容也可能取决于您正在处理的应用程序......
5 年多之前 回复
doufei9946
doufei9946 嗨Tim,我所展示的代码的灵感来自我为客户编写的作为合同一部分的内容 - 我为所有HTML控件实现了这样的控件,这是相当多的工作,但也非常有益 而且一次又一次使用一个课程的事实最有帮助。 :)如果您选择使用现有产品,Smarty(如其他海报所述)是一个不错的选择(smarty.net)。 并且有无数的框架,我的建议是yiiframework.com,laravel.com,symfony.com和framework.zend.com
5 年多之前 回复
dou12754
dou12754 谢谢你的欧芹。 这看起来很棒。 到目前为止我使用过jqueryvalidation.org。 但欧芹似乎非常有前途。 谢谢。
5 年多之前 回复
douhuibo5635
douhuibo5635 你好MBaas,这看起来很棒! 谢谢。 您正在撰写有关框架和模板引擎的文章。 您是否也可以详细说明它们,如果您知道一个,它确实像您在帖子中描述的那样工作,那么命名它们会很友好。 谢谢!
5 年多之前 回复

I would suggest to create a form template. Consider using a method (of class View):

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

    ob_start();

    require $view_filename;

    return ob_get_clean();
}

And call the static function capture (caution: consider using of __toString() to print objects) Pseudo-code:

echo View::capture('template', array('id' => '1', 'class' => 'userForm', 'inputs' => array(0 => array('label' => 'Name', 'type' => 'text'), 1 => array('label' => 'Password', 'type' => 'password')));
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐