Вопрос про form_dropdown с Codeigniter - PullRequest
2 голосов
/ 22 июля 2011

У меня вопрос по поводу использования 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();

1 Ответ

1 голос
/ 22 июля 2011

Вы правы, что его нужно преобразовать из объекта в массив, ключи - это ваши входные значения, а значения массива - это текст, отображаемый в <option> при использовании form_dropdown().То, как вы это делаете, прекрасно, и я лично рекомендую это.

Причина: Элементы управления формой и вывод HTML / текста являются логикой представления.Например, что, если вы хотите сделать это вместо этого:

$list[''] = 'Please select a game';
foreach($games as $row)
{
    $list[$row->GM_ID] = ucfirst(htmlspecialchars($row->GM_NAME));
}

Это только моя точка зрения, это на самом деле не имеет большого значения, но обычно, как правило - HTML и логика представления должны быть вview.

Помимо : имя вашей функции get_game_names() сбивает с толку, потому что возвращает больше, чем просто имена.Также для простоты вы используете ActiveRecord, так что вы можете просто сделать это:

function get_games() 
{
  return $this->db->get('games')->result();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...