请求帮助以帮助重构我的PHP类方法

时间:2012-03-04 11:30:36

标签: php

希望有人可以帮助解决这个问题

我的目标:创建一个创建HTML表单的类。

$cont->individual_fields("text", "feedName", "feed-name", null, "The name of the feed:", "200", "YES");

上面使用individual_fields()方法为在文本输入字段中找到的各种HTML属性添加值。

方法:

public function individual_fields($type, $name, $id, $class = null, $desc, $maxlength = null, $value = null, $select = null) { }

在方法中我创建了一个多维数组:

    $fields_essentials = array(
        'type' => $type,
        'name' => $name,
        'id' => $id,
        'desc' => $desc,
        'class' => $class,
        'maxlength' => $maxlength,
        'value' => $value,
        'select' => $select);

所以我现在有一个带有属性标签和值的多维数组。大。

现在我使用foreach遍历数组创建HTML表单字段。

所以它最终得到:

$text = '<tr>';
$text .= "<th><label for=\"$id\">$desc</label></th>";
$text .= '<td><'.$form.' ></td>';
$text .= '</tr>';

return $text;

HTML如下:

<label for="feed-name">The name of the feed:</label>

<input type="text" value="" maxlength="200" class="regular-text code " id="feed-name"name="affiliate_hoover_plugin_options[feedName]"/>

到目前为止所有超级粉碎。

现在我遇到的问题是获取individual_fields()方法的返回结果并将其放入另一个名为create_form()的方法中:

echo $cont->create_form("post", "#action", "optionForm", "option-form", "multipart/form-data");

public function create_form($method, $action = null, $name = null, $id = null, $enctype = null) {

    extract($this->config_settings());

    $form = null;

    $form .= "<form method=\"$method\" ";

    ($action !== null) ? $form .= " action=\"$action\"" : null;
    ($name !== null) ? $form .= " name=\"$name\"" : null;
    ($id !== null) ? $form .= " id=\"$id\"" : null;
    ($enctype !== null) ? $form .= " enctype=\"$enctype\"" : null;

    $form .= ">";
    $form .= '<fieldset>';
    $form .= "<legend>$page_title</legend>";

    $form .= '<table class="form-table">';
    $form .= '<tbody>';

    $form .= '</tbody>';
    $form .= '</table>';
    // input fields here

    // INDIVIDUAL FIELDS FROM individual_fields() method here

    // permenant settings for every form
    $form .= $this->perm_fields();
    $form .= '<input type="submit" id="submit" name="submitForm" class="button-primary" value="Save Changes">';
    $form .= '</fieldset>';
    $form .= '</form>';

    return $form;

}

如何从individual_fields()方法保存返回的值并在create_form()方法中使用它?

我已经尝试了很多不同的方法,并在这个问题上花了很多时间,我想知道问题在于我是如何构建我的类方法而不是范围问题。

如果你从上到下阅读过这篇文章,我感谢你

编辑:

阅读下面的回答并稍微考虑一下我可能只是将字段详细信息添加到create_form函数中,因此它看起来像这样:

$cont->create_form("post", "#action", "optionForm", "option-form", "multipart/form-data", array("text", "feedName", "feed-name", null, "The name of the feed:", "200", "YES"), array("text", "urlName", "url-name", null, "The URL of the feed:", "300", "YES"));

这是我想要的更复杂的代码块。如果能够分开它会很好。

1 个答案:

答案 0 :(得分:1)

您可以像这样创建函数($cont):

protected $fields = array();

function push_field( $field){
    $this->fields[] = $field;
}

// And usage:
$cont->push_field( $text);

// In create form:
foreach( $this->fields as $field){
    echo $field . "\n";
}

但是我会创建这样的课程:

class Field {
  $attrbites = array(); // HTML attributes
  $properties = array(); // Like field title or so

  public function __construct($type, $name, $id, $class = null, $desc, $maxlength = null, $value = null, $select = null) { }

  public function getHtml(){ ...
    return $text;
  }
}

在显示表单时生成所有html,而不是将验证添加到Field,添加装饰器并使用它们进行操作会更容易。