0

codeigniterフォームヘルパーのフォームドロップダウン機能を使用しようとしています。

echo form_dropdown('userCharacters', $userRoster, '', '', 'id="userCharacter"');

$userRosterがコントローラーからビューに渡す配列であることに気付いた場合。

配列に対してprint_rを実行すると、次のように表示されます。

Array
(
[0] => stdClass Object
    (
        [id] => 1
        [rosterName] => Kid Wonder
    )

[1] => stdClass Object
    (
        [id] => 3
        [rosterName] => Oriel
    )

)

ただし、これらのエラーが発生し、理由がわかりません

A PHP Error was encountered

Severity: 4096

Message: Object of class stdClass could not be converted to string

Filename: helpers/form_helper.php

Line Number: 352
A PHP Error was encountered

Severity: 4096

Message: Object of class stdClass could not be converted to string

Filename: helpers/form_helper.php

Line Number: 352

編集 :

Array
(
[0] => Array
    (
        [id] => 1
        [rosterName] => Kid Wonder
    )

[1] => Array
    (
        [id] => 3
        [rosterName] => Oriel
    )

)

編集2: ユーザーがログインした後、デフォルトの文字IDとuserData配列に保持されているユーザーのロールIDが発生するはずです。ライブラリ関数getRosterListを実行します。その関数内で、ユーザーのロールIDが4(admin)または5(superadmin)であるかどうかを確認し、その場合は、デフォルトの文字を含むすべての名簿メンバーを取得して、それを取得します。選択したオプションとして。それらがこれらの2つの役割のいずれでもない場合は、それらが制御する名簿メンバーを取得し、デフォルトの文字IDとして事前に選択されたオプションを使用する必要があります。また、文字が1つしかない場合は、ドロップダウンの代わりにh1タグが表示されます。

コントローラ:

$this->data['userData'] =   $this->users->getUserByUserID($this->session->userdata('userID'));
$this->data['userRoster'] = $this->kowauth->getRosterList($this->data['userData']->usersRolesID);

ライブラリ(kowauth)

 * Get roster list
 *
 * @param   integer
 * @return  object/NULL
 */
function getRosterList($usersRolesID)
{
    // Check args
    if(!is_numeric($usersRolesID)) { throw new Exception('Non-numeric $usersRolesID provided to getRosterList()'); }

    if (($usersRolesID == 4) || ($usersRolesID == 5))
    {
        return $this->ci->users->getAllRoster();
    } 
    else
    {
        return $this->ci->users->getRosterByUserID($this->ci->session->userdata('userID'));
    }
}

モデル:

/**
 * Get roster list
 *
 * @return  object/NULL
 */
function getAllRoster()
{       
    $this->db->select('id');
    $this->db->select('rosterName');
    $this->db->select('rosterStatusID');
    $this->db->from('rosterList');
    $this->db->order_by('rosterName');
    $query = $this->db->get();
    if ($query->num_rows() > 0) 
    {
        return $query->result();
    }
    return null;
}

/**
 * Get list of roster by user ID
 *
 * @return  object/NULL
 */
function getRosterByUserID($userID)
{
    // Check args
    if (!is_numeric($userID)) { throw new Exception('Non-numeric $userID provided to getRosterByUserID()'); }

    $this->db->select('id');
    $this->db->select('rosterName');
    $this->db->from('rosterList');
    $this->db->where('userID', $userID);
    $this->db->order_by('rosterName');
    $query = $this->db->get();
    if ($query->num_rows() > 0) 
    {
        return $query->result_array();
    }
    return null;
}

意見:

<?php 
        echo '<pre>';
        print_r($userRoster);
        echo '</pre>';
        if (count($userRoster) == 1)
        {
            echo '<h1>'.$userRoster->rosterName.'</h1>';
        }
        else 
        {
            $options = array (
                $userRoster['id'] => $userRoster->rosterName
            );
            echo form_dropdown('userCharacters', $options, '', 'id="userCharacter"');
        }
        ?>

誰かがこれについて何か考えがありますか?

4

1 に答える 1

3

現在、オブジェクトの配列を渡しています。$userRoster配列は次のようにフォーマットする必要があると思います。

Array
(
     1 => 'Kid Wonder'
     3 => 'Oriel'
)

また、form_dropdownは4つのパラメーターのみを取り、5つを渡そうとしていると思います。その最後の引数を4番目の場所に移動することをお勧めします。

echo form_dropdown('userCharacters', $userRoster, '', 'id="userCharacter"');

生成する必要があります:

<select name="userCharacters" id="userCharacter">
<option value="1">Kid Wonder</option>
<option value="3">Oriel</option>
</select>

私はあなたが何をしようとしているのかと思います!

http://codeigniter.com/user_guide/helpers/form_helper.html

于 2012-04-06T18:54:18.083 に答える