Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更快的html/php格式?_Php_Html_Forms_Class - Fatal编程技术网

更快的html/php格式?

更快的html/php格式?,php,html,forms,class,Php,Html,Forms,Class,我现在正在做一个需要很多表格的项目。我在考虑一个变通办法,尽量减少花在这个问题上的时间。最重要的是,我不想用一个框架来为我做这件事,我仍在学习,所以对我来说理解核心是很重要的 好的,我有一个名为form builder的类,它如下所示: <?php class formBuilder extends systemCore{ public $token, $method=array(); public function __construct(){ pa

我现在正在做一个需要很多表格的项目。我在考虑一个变通办法,尽量减少花在这个问题上的时间。最重要的是,我不想用一个框架来为我做这件事,我仍在学习,所以对我来说理解核心是很重要的

好的,我有一个名为form builder的类,它如下所示:

<?php

class formBuilder extends systemCore{

   public $token, $method=array();  

   public function __construct(){
        parent::__construct();
   }

   public function getFormMethod(&$method, $pop, $filter){//($_POST, true, filterStr)
        if($pop == true): 
        array_pop($method); 
        endif;

        foreach($method as $f => $v){
            if(is_array($v)){
                $v = implode(',', $v);
            }
            $this->method[$f] = $filter($v);
        }
        return $this->method;

   }


   public function generateToken(){
     return $this->token = mt_rand(1, 10000).md5();
   }

   public function inputField($label, $type, $id, $name, $value, $title, $css, $required){

        $required = ($required == true) ? trim('<span color="red">&lowast</span>') : '';

        // i know this seems a little redundant

        $label = (is_null($label)) ? '' : trim(htmlspecialchars($label, ENT_QUOTES));
        $type = (is_null($type)) ? 'text' : trim(htmlspecialchars($type, ENT_QUOTES));
        $id = (is_null($id)) ? '' : trim(htmlspecialchars($id, ENT_QUOTES));
        $name = (is_null($name)) ? '' : trim(htmlspecialchars($name, ENT_QUOTES));
        $value = (is_null($value)) ? '' : trim(htmlspecialchars($value, ENT_QUOTES));
        $title = (is_null($title)) ? '' : trim(htmlspecialchars($title, ENT_QUOTES));
        $css = (is_null($css)) ? '' : trim(htmlspecialchars($css, ENT_QUOTES));

        echo('
        <label for="'.$name.'">'.$label.'</label><br />
        <input type="'.$type.'" id="'.$id.'" name="'.$name.'" value="'.$value.'" title="'.$title.'" class="'.$css.'">'.$required.'<br />
        ');
   }

   //.................and so on

} // end class formBuilder

?>
CSS将同样应用于这两种方法,因此我没有真正缩短任何开发时间,因此我不确定如何使用这张牌

我只是想听听其他的意见,
大家好。

我知道我不想使用框架。作为一名PHP开发人员,我多年来一直避免使用它们。然而,在对RubyonRails进行了采样之后,我了解了它们在像您这样的项目上的强大功能——大量的表单/数据驱动应用程序。不过,我的经验在于PHP,所以我看了一下

话虽如此,如果只是简单地输出HTML,那么YourClass不会在开发时间上给您带来任何大的好处。通过将表单字段输出封装在FormBuilder类中,您可能已经实现了表单字段输出的标准化,但这又能为您带来什么呢

当这个类还可以管理表单验证、保存、编辑等,或者当它可以从数据模型(SQL模式、配置数组)自动构建表单时,真正的威力就来了

你不可能完成所有这些事情。如果你这样做了,我会说你只是建立了自己的框架。在这一点上,开发formbuilder的时间很可能与手工开发表单的时间一样多。不幸的是,您不太可能再次使用formbuilder,因为它是为这个项目定制的

我的建议是确定给您带来最大收益的领域,并将其开发到表单生成器中。我还建议,代码生成器可以为您节省同样多的时间。几年前,我也写了一个自定义表单生成器。但它只是输出HTML(就像您当前的一样),然后我将复制并粘贴到我的PHP文件中。所以它是静态的,但是您真的需要每次动态地构建表单吗?它使我能够专注于表单逻辑,而不必浪费时间构建表单。我猜这就是你的目标


真正的框架、库、生成等是惯例和代码的平衡。我会看看CakePHP。如果没有其他内容,请阅读/复习它们,作为构建自己的建筑的参考。看看需要做些什么,然后决定这是你需要的,还是只是需要一些东西来生成表单(你现在拥有的东西已经不远了)。

虽然为了学习而重新发明轮子没有什么错,但请记住,你在这里发明轮子。:)

虽然许多输入类型采用非常相似的参数,但并非所有输入类型都采用相同的参数集。还有一些类型是值组(收音机、选择),还有一些类型以不同的方式处理其默认值(文本区域)。创建HTML的一个函数将变得一团糟

您可能想考虑每个窗体元素类型创建一个类。使用抽象基类提供常用方法名和实用程序方法

创建表单元素只是挑战的一部分。除了布局,还有标签需要关注。你是在课堂上还是在其他地方处理这个问题

数据验证呢?你会在生成代码的表单中处理这个问题吗?如果没有,您计划如何处理无效的表单数据?您是否将不正确的表单返回给用户?看起来你可能已经计划好了。如果您打算集中验证,那么它将是一个巨大的负担


现在,再想想你的时间。你的时间花在哪里会更好,只为你的应用程序编写新的代码,这些代码可能完成工作,也可能无法完成工作,或者学习最初令人畏惧但结构良好的第三方库是如何工作的,其他人已经为你完成了所有的艰苦工作吗?

我理解由于缺乏理解和想要学习而不使用框架的冲动。我认为尝试编写自己的课程是一个好主意。然而,我发现最好的学习方法是编写我自己的简单类,就像你在表单构建中所做的那样,然后一旦我理解了基本概念,就去上一个预先构建的类,并尝试理解它

正如查尔斯所说,为学习而重新发明轮子通常是个好主意,一旦你掌握了足够的知识,也许是时候拥抱已经发明的轮子了

我最近一直在使用它,它是一个很酷的表单库,可以独立运行,你不需要一个框架来保存所有现有的代码,但是有人花了很多时间创建了一个非常好的类,所以为什么不花几个小时,或者试着改进它呢

我向您推荐表单的另一个原因是,可下载的代码在复选框代码中有一个错误,并且没有单选按钮代码,在我列出的页面上的注释中有非常简单的修复,但是尝试修复错误并添加单选按钮类对您来说是一个很好的挑战

希望这有帮助


卢克

感谢您的回复,我确实计划在将来使用一个框架,可能是“协同点火器”。我在你建议的地方(SQL模式、构建阵列)使用了专业版。我接受你关于可重用性的观点,但只要我保持单独验证,我就可以了。你可以在类中加入一些基本的验证,并保持它的可重用性。同样,请查看CakePHP了解这些类型的内容。我特别喜欢它们传递配置数组和不长的参数列表的方式。此外,他们的简单验证规则——notempty、alphanum、email、url等都是相当标准的。我查看了CodeIgnitor,但觉得它更像是一组库,而不是一个框架。看看这会带你去哪里,然后做你的决定
$form = new formbuilder();
$form->inputField('name', 'text', 'name', 'name', 'my value', 'my title', null, true);