gpt4 book ai didi

forms - CodeIgniter:具有多个输入的表单的 Controller 结构

转载 作者:行者123 更新时间:2023-12-04 05:55:17 26 4
gpt4 key购买 nike

我正在使用 CodeIgniter 开发一个站点,并试图遵循“胖模型/瘦 Controller ”范例,但是当涉及包含具有多个输入的表单的页面时,我遇到了一些问题。下面的代码是我用来定义地址字段输入的代码

我的 Controller 的一部分(我在其中定义表单输入及其属性):

$this->data['address1'] = array(
'name' => 'address1',
'id' => 'address1',
'type' => 'text',
'class' => 'field text addr',
'tabindex' => '10',
'value' => $this->form_validation->set_value('address1'),
'placeholder' => 'Street Address'
);

$this->data['address2'] = array(
'name' => 'address2',
'id' => 'address2',
'type' => 'text',
'class' => 'field text addr',
'tabindex' => '11',
'value' => $this->form_validation->set_value('address2'),
'placeholder' => 'Address Line 2',
);

$this->data['city'] = array(
'name' => 'city',
'id' => 'city',
'type' => 'text',
'class' => 'field text addr',
'tabindex' => '12',
'value' => $this->form_validation->set_value('city'),
'placeholder' => 'City'
);

$this->data['state'] = array(
'name' => 'state',
'id' => 'state',
'class' => 'field addr',
'tabindex' => '13',
'value' => $this->form_validation->set_value('state'),
'label' => array('class' => 'desc')
);

$this->data['zip'] = array(
'name' => 'zip',
'id' => 'zip',
'type' => 'text',
'class' => 'field text addr',
'tabindex' => '14',
'maxlength' => '20',
'value' => $this->form_validation->set_value('zip'),
'placeholder' => 'Zip / Postal Code'
);

$this->data['country'] = array(
'name' => 'country',
'id' => 'country',
'class' => 'field addr',
'tabindex' => '15',
'value' => $this->form_validation->set_value('country')
);

我的 View 的一部分(减去所有用于定位表单输入的 HTML):
<?php
echo form_open("address/add");
echo form_input($address1);
echo form_input($address2);
echo form_input($city);

$options = array();
$options[''] = 'State / Province / Region';
foreach($province_options AS $prov)
{
$options[$prov->id] = $prov->province;
}
echo form_dropdown('state',$options,'',$state);

echo form_input($zip);

$options = array();
$options[''] = 'Country';
foreach($country_options AS $cnt)
{
$options[$cnt->id] = $cnt->country;
}
echo form_dropdown('country',$options,'',$country);
echo form_submit('submit', 'Submit & Continue');
echo form_close();
?>

我觉得我的 Controller 过于冗长,但如果我计划使用 Form Helper 在我的 View 中生成表单输入,我想不出如何组织表示我的表单所需的信息的替代方案.这是做事的正确方法,还是有更好的方法?

最佳答案

有一些逻辑可以移动到 Controller 甚至模型层:

$options = array();
$options[''] = 'Country';
foreach($country_options AS $cnt)
{
$options[$cnt->id] = $cnt->country;
}
echo form_dropdown('country',$options,'',$country);

可能看起来像:
echo form_dropdown('country', $countries, '', $country);

...如果您将选项移动到 Controller 或 View 。

这是我一直在尝试保留东西时遇到的问题 DRY尽可能在哪里定义表单数据?我想有时我们会忘记“MVC”中“V”的力量。您可以改为在 View 中定义所有 View 逻辑。

诸如 id 之类的东西, tabindexplaceholder仅在 View 中是必要和有用的。表单验证规则和数据检查/准备等内容属于 Controller /模型层。

表单辅助函数很有用,但有时原始 HTML 更好。例如:
// Controller
$this->data['address1'] = array(
'name' => 'address1',
'id' => 'address1',
'type' => 'text',
'class' => 'field text addr',
'tabindex' => '10',
'value' => $this->form_validation->set_value('address1'),
'placeholder' => 'Street Address'
);
// View
echo form_input($address1);

或者干脆:
<input name="address1" id="address1" tabindex="10" type="text" placeholder="Street Address" value="<?php echo set_value('address1'); ?>" class="field text addr">

去年我写了一堆应用程序,我在模型中定义了所有这些东西,现在我很后悔,因为我已经回去对它们进行维护,并且所有的 View 逻辑都在模型或 Controller 中被掩盖了.编辑 Controller 或模型以更改 class属性只是愚蠢的。

关于forms - CodeIgniter:具有多个输入的表单的 Controller 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9574816/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com