Представление загрузки, передающее переменную в функцию контроллера — CodeIgniter

#codeigniter #view

#codeigniter #Вид

Вопрос:

Я использую CodeIgniter и хочу загрузить представление, такое как:

 $this->load->view('image/delete/' . $_POST['id'], $data);
  

$_POST[‘id’] является обязательным параметром моей функции ‘delete’ внутри моего контроллера ‘image’. Я бы подумал, что это будет работать нормально, но я получаю ошибку CI с указанием:

«Не удается загрузить запрошенный файл: image/delete/113.php «

Я не понимаю, почему CI добавляет «.php» в конец этого, неудивительно, что он не может найти этот файл. Что я делаю не так?

Комментарии:

1. Загрузка представления — это не то же самое, что загрузка URL. Представление — это файл, хранящийся локально на вашем жестком диске (ну, на серверах), и вы передаете в него данные через $data. Вы пытаетесь передать данные через URL, а PHP ищет фактический файл image/delete/113.php (автоматически добавляет .php к представлениям / контроллерам / моделям и т.д.)

Ответ №1:

В дополнение к ответу Ивана, то, что вы пытаетесь сделать, нарушает принцип MVC: разделение интересов.

Представления должны просто отображать данные, они никогда не должны получать функциональность, такую как удаление ресурсов.

Вместо загрузки представления вам нужно будет использовать redirect() функцию в вспомогательном классе URL, чтобы перенаправить браузеру URL "image/delete/".$image_id

Затем, как предположил Иван, вам понадобится Image контроллер с delete($id) функцией. Эта функция удалит ваше изображение, а затем загрузит представление, указывающее, что ресурс был удален.

Комментарии:

1. Спасибо, это помогает — ха-ха, я подумал, что, возможно, «нарушаю принцип MVC», это меня не удивляет. Я знаю, что это для моей пользы, просто нужно привыкнуть к этому!

Ответ №2:

Расширение файла .php указывать не нужно, если вы не используете что-то другое, кроме .php.

Код в контроллере «image»:

 public function delete($parameter=false)
{

some_delete_function($parameter);

//and load view

}
  

Ответ №3:

Похоже, вы пытаетесь использовать представление для загрузки URL / изображения / удаления / 113. Но он пытается загрузить представление ~ application / views /images /delete / 113 с вашего жесткого диска.

Я бы рекомендовал просто удалить изображение из вашего кода, возможно, создать библиотеку, если она сложная, или вспомогательную, если это не так, и вызвать ее из контроллера там.

Комментарии:

1. Невозможно ли загрузить представление, подобное: (‘controller / function /parameter’)?

2. Насколько мне известно, нет. Я не уверен, зачем вам это нужно. Если вы хотите удалить изображение, просто выполните команду «разорвать ссылку (filename)».