загрузка представлений при редактировании записи в 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 ответа:
Для перенаправления на тот же 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>
Это вернется к той же странице редактирования, после отправки также.
Надеюсь, это поможет вам, дайте нам знать, если что-нибудь есть... Спасибо!!