загрузка просмотров при редактировании записи в codeigniter - PullRequest
2 голосов
/ 18 июня 2011

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

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

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

$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 голосов
/ 18 июня 2011

Сначала загрузите вспомогательный URL-адрес «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>

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

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

2 голосов
/ 18 июня 2011

Чтобы перенаправить на тот же URL-адрес, что и текущий:

redirect(current_url());

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

$ this-> load-> Вид ( 'edit_user /' $ этом-> uri-> сегмент (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, всегда отвечайте соответствующим образом, если нужные вам данные не соответствуют есть.

...