我对使用form_dropdown()
有疑问。
以下代码有效,但我不确定是否必须在视图中执行新数组,或者是否有更好的方法使用数组$games
- 通过来自$data['games']
?
我应该在控制器中进行所有处理并通过就绪阵列发送以填充下拉列表吗?
我在视图中尝试了这个:echo form_dropdown('games', $games);
但是得到了错误“类stdClass的对象无法转换为字符串”,我认为这是因为它是一个对象数组而我必须转换它?
表:游戏
GM_ID - int
GM_NAME - var
MODEL:
class Test_model extends CI_Model {
function __construct()
{
// Call the Model constructor
parent::__construct();
}
function get_game_names()
{
$queryg = $this->db->query("SELECT * FROM games");
return $queryg->result();
}
}
CONTROLLER
class Test extends CI_Controller {
public function index()
{
$this->load->model('test_model');
$data['games'] = $this->test_model->get_game_names();
$this->load->view('view_test',$data);
}
}
查看
$this->load->helper('form');
echo form_open('send');
$list = array(); //is this the best way to do it??
foreach($games as $row)
{
$list[$row->GM_ID] = $row->GM_NAME; //is this the best way to do it??
}
echo form_dropdown('games', $list); //then pass this array?
echo form_close();
答案 0 :(得分:1)
您是正确的,它需要从对象转换为数组,键是您的输入值,数组值是<option>
使用form_dropdown()
时显示的文本。你这样做的方式很好,我个人推荐它。
原因:表单控件和HTML /文本输出是视图逻辑。例如,如果您想要这样做,那该怎么办?:
$list[''] = 'Please select a game';
foreach($games as $row)
{
$list[$row->GM_ID] = ucfirst(htmlspecialchars($row->GM_NAME));
}
这只是我的观点,它确实无关紧要,但通常作为一项规则 - HTML和表示逻辑应该在视图中。
除了:您的函数名称get_game_names()
令人困惑,因为它返回的不仅仅是名称。同样为了简单起见,您使用的是ActiveRecord,因此您可以这样做:
function get_games()
{
return $this->db->get('games')->result();
}