【发布时间】:2018-04-12 03:43:22
【问题描述】:
问题:
我有一个表单我正在尝试re-populate via the CodeIgniter docs,我正在尝试在我的视图文件中使用set_value() 函数,但我收到一个错误:Message: Call to undefined function set_value()。
在使用 set_rules() 函数逐字段定义验证时,我在 StackOverflow 的其他地方看到了 similar problem 的解决方案。
但是,我在config/form_validation.php 中汇总了我的所有验证,例如sets of rules。因为我的所有验证都是在规则集中定义的,所以它似乎与逐个字段定义时有所不同。
我的规则集、控制器、模型和视图方法如下。
知道为什么我的重新填充不起作用吗?
感谢任何人提供的任何见解,我是 CodeIgniter 的新手,我可能会误解事情的运作方式。
验证规则来自config/form-validation.php:
$config = array(
'create' => array (
array(
'field' => 'name',
'label' => 'product name',
'rules' => 'trim|required|min_length[5]',
),
array(
'field' => 'description',
'label' => 'product description',
'rules' => 'trim|required|min_length[5]',
),
array(
'field' => 'price',
'label' => 'product price',
'rules' => 'trim|required|min_length[1]|less_than[100000]|decimal',
),
),
);
在我的控制器中:
public function create()
{
// XSS FILTER $POST OBJECT
$new_product = $this->input->post(null, true);
// SEND TO MODEL
$this->load->model("Product_model");
$product = $this->Product_model->add_product($new_product);
// IF VALIDATIONS RETURN FALSE, STORE ERRORS IN FLASH SESSION
if ($product[0] === FALSE)
{
$this->session->set_flashdata('errors', $product[1]);
redirect("/products/new");
}
// IF VALIDATION PASSES, SEND HOME
redirect("/");
}
在我的模型中:
public function add_product($product)
{
$this->load->library("form_validation");
if ($this->form_validation->run("create") === FALSE)
{
// STORE ERRORS & SHIP BACK TO CONTROLLER:
return array(FALSE, validation_errors());
}
else
{
// Success, Escape strings and insert to DB and return TRUE (or item)
}
}
在我的表单视图中:
(在表单上方显示返回错误的页面)
<form action="./create" method="POST">
<input type="text" name="name" id="name" value="<?php echo set_value('name'); ?>">
<textarea name="description" id="description" cols="30" rows="10" value="<?php echo set_value('description'); ?>"></textarea>
<input type="number" name="price" id="price" value="<?php echo set_value('price'); ?>">
<input type="submit" value="Create">
</form>
【问题讨论】:
-
验证使用模型,产品使用控制器。
-
您在错误区域的表单验证应该在控制器上而不是在模型中。如此处所述codeigniter.com/user_guide/libraries/…
-
@Mr. ED 感谢您的回复/帮助。我已经在其他全栈中学会了将验证放入模型中......至少这是我倾向于在 JS/Python 堆栈中做事的方式,等等。我看到一些 CI 的人有这样的争论,关于验证进入控制器,但我也在 CI 中看到了在模型中完成的示例。我相信应该可以实现我想要在模型中验证的内容。我什至尝试将我的逻辑移动到控制器中(并为验证创建单个规则,而不是使用规则数组)。仍然没有运气。我可能缺少一些基本的东西......嗯
-
@Mr. ED 我确实根据 pradeep 的反馈添加了
form_helper以自动加载,所以我现在似乎可以在我的视图中访问set_value()函数,但不幸的是数据没有填充。如果我将第二个参数设置为默认值,它将填充,但字段数据本身不会。这甚至发生在我将验证移到控制器本身时,甚至当我尝试编写单个规则而不是使用规则数组时。似乎它的设置正确,我一定遗漏了一些东西......再次感谢您的时间和帮助
标签: php codeigniter validation