Представления codeigniter с динамическими параметрами - PullRequest
1 голос
/ 05 ноября 2010

У меня есть представление редактирования, URL которого / group / edit / 1, где 1 - идентификатор группы, который является динамическим.

Я проверяю данные формы в контроллере как:

if ($this->form_validation->run() == FALSE)
{
    $this->load->view('group/edit', $data);
}

Как передать параметр id "1" в это представление?

Опция ниже не работает, так как URL должен быть group / edit / 1

$this->load->view('edit', $data);

Ответы [ 3 ]

2 голосов
/ 05 ноября 2010

Вы думаете об этом неправильно.Вы хотите иметь представление с именем edit.php и передать в него число 1, или, более того, вы хотите получить данные для 1 из вашей модели и передать возвращаемое значение вашей модели в ваше представление.Учтите это:

контроллер

function edit($id)
{
    $data['item_info'] = $this->whateverModel->getItem($id);
    $this->load->view('edit', $data);
}

Затем в представлении редактирования вы можете ссылаться на данные следующим образом:

представление

echo $item_info['id'];
echo $item_info['name']; //or whatever you pass back from the model
0 голосов
/ 06 ноября 2010

Это то, что я делаю. Это приемлемо?

Действие контроллера:

function edit($id)
{
$group_q = $this->db->query("SELECT * FROM groups WHERE id = ?", array($id));
$group_data = $group_q->row();

    /* Form fields */
    $data['name'] = array(
        'name' => 'name',
        'id' => 'name',
        'value' => $group_data->name,
    );
    $options = array("A", "B", "C", "D");
    $data['group_parent'] = $options;
    $data['group_parent_status'] = $group_data->parent_id;
    $data['group_id'] = $id;

    /* Form validations */
    $this->form_validation->set_rules('name', 'Name', 'trim|required|min_length[2]');

    if ($this->form_validation->run() == FALSE)
    {
        if ($this->input->post('submit', TRUE))
        {
            $data['name']['value'] = $this->input->post('name', TRUE);
            $data['group_parent_status'] = $this->input->post('group_parent', TRUE);
        }
        $this->load->view('group/edit', $data);
    }
    else
    {
        $data_name = $this->input->post('name', TRUE);
        $data_parent_id = $this->input->post('group_parent', TRUE);
        $data_id = $id;

        if ( ! $this->db->query("UPDATE groups SET name = ?, parent_id = ? WHERE id = ?", array($data_name, $data_parent_id, $data_id)))
        {
            $this->session->set_flashdata('error', "Error");
            $this->load->view('group/edit', $data);
        } else {
            $this->session->set_flashdata('message', "Success");
            redirect('account');
        }
    }
    return;
}

Просмотр файла:

<?php
echo form_open('group/edit/' . $group_id); /***** NOTE THIS STEP *****/
echo "<p>";
echo form_label('Name', 'name');
echo "<br />";
echo form_input($name);
echo "</p>";
echo "<p>";
echo form_label('Parentp', 'group_parent');
echo "<br />";
echo form_dropdown('group_parent', $group_parent_active);
echo "</p>";
echo form_hidden('group_id', $group_id);
echo form_submit('submit', 'Submit');
echo form_close();

?>

0 голосов
/ 05 ноября 2010

Это то, что вы имеете в виду?

$this->load->view('group/edit/'.$parameter, $data);

Это заставит его загрузить 1, поскольку вы просто определяете путь к документу VIEW

Для ссылки CodeIgniters это формат: $this->load->view('folder_name/file_name');

http://codeigniter.com/user_guide/general/views.html

Не уверен, что если вы путаетесь с представлениями, вот небольшая разница:

Если хотите http://www.example/group/edit/10 тогда вам нужна настройка маршрута, а не вид.

Если вы хотите http://www.example/ и отобразить содержимое со страницы main.php (в папке представлений), тогда вы сделаете $this->load->view('main'); внутри основного контроллера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...