字符串偏移量'name'非法CodeIgniter 4

时间:2020-08-20 16:58:16

标签: php codeigniter

我是CodeIgniter 4的新用户。当我想在表单上显示表“ prodi”的“ prodi_name”时出现此错误。

这是我的ProdiModel

protected $table = 'prodi';
protected $primaryKey = 'id_prodi';

public function getProdi($id = false)
{
    if ($id == false) {
        return $this->findAll();
    }
    return $this->where('prodi_code', $id)->first();
}

我已将我的BaseController设置为

$this->prodiModel = new \App\Models\ProdiModel();

所以我的控制器是

public function add()
{
    $data = [
        'title'     => 'Admin',
        'prodi'     => $this->prodiModel->getProdi(),
        'validation' => \Config\Services::validation()
    ];

    return view('admin/add', $data);
}

这是我的表单,我想在多个选择字段上显示prodi_name

<div class="form-group">
    <label>Prodi</label>
    <select class="form-control select2 multiple" id="prodi" name="prodi[]" multiple="multiple" data-placeholder="Select prodi">
     <?php
     foreach ($prodi as $prodi) :
         echo "<option value='" . $prodi["prodi_name"] . "'";
         if (old('prodi')) {
            if (in_array($prodi['prodi_name'], old('prodi'))) echo "selected";
         }
         echo ">" . $prodi['prodi_name'] . "</option>";
     endforeach; ?>
  </select>
</div>

请帮助我解决此问题。谢谢

1 个答案:

答案 0 :(得分:0)

首先在CI 4中没有first()方法, 使用

public function getProdi($id = false)
{
    if ($id == false) {
        return $this->findAll();
    }
    return $this->where('prodi_code', $id)->getFirstRow(‘array’);
}

第二个想法是,您将在此处返回两种类型的数据,如果id为false,则返回多维数组,如果id存在,则代码返回单行。 同样,您在同一方法中调用了findAll(),如果它返回并关联数组,则代码应运行,但是如果返回对象,则应更改为

  <?php
     foreach ($prodi as $prodi) :
         echo "<option value='" . $prodi->prodi_name . "'";
         if (old('prodi')) {
            if (in_array($prodi->prodi_name, old('prodi'))) echo "selected";
         }
         echo ">" . $prodi->prodi_name . "</option>";
     endforeach; ?>
相关问题