Codeigniter将默认表单值从Controller设置为View

时间:2013-01-01 16:22:14

标签: php codeigniter-2 crud

我只是厌倦了解,为什么我的Codeigniter项目会生成以下警告信息。

A PHP Error was encountered

Severity: Warning

Message: Creating default object from empty value

Filename: controllers/person.php

Line Number: 268

在我的人控制器中,

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

        // load library
        $this->load->library(array('table','form_validation'));

        // load helper
        $this->load->helper('url');
        $this->load->config('array_constant', TRUE);

        // load model
        $this->load->model('Person_model','',TRUE);
    }
// set empty default form field values
    function _set_fields()
    {
        Line No: 268 $this->form_data->id = '';
        $this->form_data->name = '';
        $this->form_data->gender = '';
        $this->form_data->dob = '';
        $this->form_data->district = '';
        $this->form_data->education = '';
        $this->form_data->occupation = '';
        $this->form_data->annual_income = '';
        $this->form_data->company_name = '';
        $this->form_data->description = '';
    }

在我的视图文件中,

<table width="100%">
          <tr>
            <td width="30%">ID</td>
            <td><input type="text" name="id" disabled="disable" class="text" value="<?php echo set_value('id'); ?>"/></td>
            <input type="hidden" name="id" value="<?php echo set_value('id',$this->form_data->id); ?>"/>
        </tr>
        <tr>
            <td valign="top">Name<span style="color:red;">*</span></td>
            <td><input type="text" name="name" class="text" value="<?php echo set_value('name',$this->form_data->name); ?>"/>
<?php echo form_error('name'); ?>
            </td>
        </tr>

任何有关抑制上述警告的想法或建议!

echo "<pre>";
        var_dump($this->form_data);
        echo "</pre>";

object(stdClass)#21 (10) {
  ["id"]=>
  string(0) ""
  ["name"]=>
  string(0) ""
  ["gender"]=>
  string(0) ""
  ["dob"]=>
  string(0) ""
  ["district"]=>
  string(0) ""
  ["education"]=>
  string(0) ""
  ["occupation"]=>
  string(0) ""
  ["annual_income"]=>
  string(0) ""
  ["company_name"]=>
  string(0) ""
  ["description"]=>
  string(0) ""
}

2 个答案:

答案 0 :(得分:4)

此通知在PHP 5.4及更高版本中生成。这不是一个错误,它是一个通知 - 旨在帮助您调试应用程序并提高对可能问题的认识。

当您最初致电_set_fields时,$this->form_dataNULL,然后您尝试使用此行处理类似对象的NULL:

$this->form_data->id = '';

NULL不能有像“id”这样的属性,所以通知告诉你PHP假设你想要一个对象,所以它自动为你做了一个。

有很多方法可以解决这个问题,需要对代码进行一些重组,但需要一个简单的解决方案来解决这个问题:

$this->form_data = new stdClass;
$this->form_data->id = '';
// etc.

更好的解决方案是为对象使用一个类,非常简单的例子:

$this->form_data = new MY_Form_Data_Object();

class MY_Form_Data_Object { // use a better name that describes what this is
    public $name = '';
    public $gender = '';
    public $dob = '';
    // etc.
    // add some helpful methods here when needed, like validation
    // maybe a constructor to initialize some values
}

答案 1 :(得分:2)

我有同样的问题,除了我无法更改我的所有代码。

要让CI禁止警告,我在index.php中将ENVIRONMENT设置为production:

//define('ENVIRONMENT', 'development');
define('ENVIRONMENT', 'production');   

基本上CI设置错误报告

error_reporting(0);