загрузка представлений при редактировании записи в codeigniter


Здравствуйте, я новичок в CodeIgniter. Я изучаю эту структуру, разрабатывая тестовое приложение. Я показываю список пользователей и перед каждой записью привязку тега для редактирования этой записи. Этот якорный тег выглядит как

echo(anchor('first/edit_user/'.$value->id,'Edit'));

Он перенаправляет браузер на первый контроллер и функцию edit_user. В функции edit_user я загружаю представление edit следующим образом.

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

Он загружает представление относительно выбранной записи для редактирования записи, и url-адрес выглядит как

http://localhost/CodeIgniter/index.php/first/edit_user/9 

Все работает отлично. Но когда пользователь нажимает кнопку Обновить, он снова переходит к той же функции. Он обновляет запись, а затем снова пытается загрузить то же представление, но здесь возникает проблема. Теперь после обновления записи он загружает вид и url становится таким

http://localhost/CodeIgniter/index.php/first/edit_user

Он создает ошибку, так как не имеет идентификатора выбранной записи. Если я изменю код представления загрузки моей функции следующим образом

          $this->load->view('edit_user/'$this->uri->segment(3)),$data);

Он генерирует ошибку edit_user/.php не определен и что-то вроде этого. Теперь я хочу спросить, как я могу перенаправить пользователя на ту же форму редактирования, сообщая, что его запись была обновлена? Как загрузить представление выбранная запись из функции контроллера?

2 2

2 ответа:

Для перенаправления на тот же URL, что и текущий:

redirect(current_url());

В противном случае уточните, куда вы хотите перенаправить.

$Эта->нагрузки>показать('edit_user/'$этом->Ури->сегмент(3)),$данных);

Он генерирует ошибку edit_user/.php не определен и что-то вроде этого.

Вместо использования определенных сегментов URL используйте параметры, переданные контроллеру, и устанавливайте значения по умолчанию, а также обрабатывайте возможное отсутствие или недействительность переданных аргументов. (сегменты url). Пример:

function edit_user($id = NULL)
{
    if ( ! $id) // handle error (redirect with message probably)

    $user = $this->user_model->get($id);

    if ( ! $user) // User not found, handle the error

    // If user found, load the view and data

}

Помните, что контроллеры по - прежнему являются всего лишь классами и функциями php и принимают пользовательский ввод (все, что я могу ввести в адресной строке) - поэтому никогда не предполагайте ничего о том, что находится в URL, всегда отвечайте соответствующим образом, если нужных вам данных там нет.

Сначала загрузите url helper " config / autoload.php "

/*
| -------------------------------------------------------------------
|  Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
|   $autoload['helper'] = array('url', 'file');
*/

$autoload['helper'] = array('url');

Или загрузите помощник URL в саму функцию

public function edit_user($user_id = '')
{
    if(!is_numeric($user_id) {
        // user id is not here redirect somewhere //
        redirect('home/index');
    }

    if(isset($_POST['submit'])) {
        // proceed to model // @param is optional // you can pass hidden field from form also //
        $this->user_model->edit_user($user_id)
    }

    $this->load->helper('url');
    $this->load->view('first/edit_user', $data);
}

Теперь перейдите к своей форме:

<form method="post" action="<?php echo current_url(); ?>">

</form>

Это вернется к той же странице редактирования, после отправки также.

Надеюсь, это поможет вам, дайте нам знать, если что-нибудь есть... Спасибо!!