#model-view-controller #codeigniter #controller
#модель-представление-контроллер #codeigniter #контроллер
Вопрос:
Я новичок в MVC, CodeIginter. Вместо того, чтобы упростить задачу, для простого приложения требуется написать много кода. Это может произойти, потому что я новичок. Так что у меня мало путаницы в этом вопросе. Приветствуется любая помощь.
1) Методы, записанные в одном контроллере, не могут быть доступны в других классах контроллеров. Я должен написать новую функцию для той же функциональности.
2) Чтобы создать панель администрирования веб-сайта (серверную часть) ни в одной панели mvc, мы обычно создаем ее в новой папке. Возможно ли это в CodeIgniter? Если нет, то как насчет администратора (серверной части)??
Ответ №1:
Давайте попробуем развеять некоторые ваши сомнения по этому поводу.
1) Вызов метода контроллера с другого контроллера невозможен, и, кстати, это имеет значение.
Предполагается, что контроллер должен получить действие из URL-адреса (который направляется CI нужному контроллеру для выполнения задачи) и, основываясь на этом, решить, какая модель и какой метод модели необходимо вызвать для обработки запрошенных данных.
Затем модель возвращает результат этой обработки контроллеру, который, в свою очередь, решает, в какое представление передать эти результаты.
Представление, в конечном счете, структурировано для получения этих данных и их отображения.
ИТАК, как вы можете видеть, вызов метода контроллеров с другого контроллера — это нонсенс, это все равно что перейти на страницу и вместо этого найти другую; если вы хотите передать запрос другому контроллеру … что ж, для этого есть перенаправление.
Если вы обнаружите, что у вас одинаковые функциональные возможности в несколько раз, подумайте дважды:
- Что такое функциональность? Вы имеете в виду что-то вроде «отображать сообщения» в контроллере «архив» и «отображать сообщения» в контроллере «новости»? вряд ли они обладают одинаковой функциональностью; возможно, они могут совместно использовать представления или модели, но это все.
- Для функций, которые не связаны с URL-адресами, но требуют некоторой дополнительной доработки (что может быть неправильно в моделях) и, тем не менее, вызываются в контроллере, вместо этого у вас есть библиотека. Подумайте о библиотеке «form_validation», которая вызывается в методе контроллера, но имеет свои собственные специфические (и инкапсулированные) функции. Или библиотека «сеанса» или библиотека «аутентификации»
2) Для создания панели администратора проще всего: создать контроллер «admin» (который затем доступен для www.mysite.com/index.php/admin ), и поместите все действия администрирования туда, в его методы: create_page(), edit_page(), manage_users() , что угодно. Чтобы люди не могли свободно обращаться к нему, вам необходимо создать систему аутентификации, которая в своей простейшей и простой структуре может быть проверкой того, установлен ли сеанс или нет (возможно, проверка, выполняемая во время __construct() ).)).
Но вы можете найти уже созданные хорошие библиотеки аутентификации, такие как Ion Auth или Tank Auth (2 самых популярных, насколько мне известно)
Надеюсь, теперь все немного прояснилось. Смотрите также комментарий Interstellar_Coder к этому ответу, если вас интересует модульный подход HMVC.
Комментарии:
1. На самом деле, используя новый шаблон HMVC, вы теоретически можете вызвать другой метод контроллера с одного контроллера. Это, по-видимому, растущая тенденция и помогает дальнейшему разделению кода, внутренне запрос имитируется, а выходные данные из представления возвращаются и могут использоваться совместно с представлением для текущего контроллера. Хотя в данном конкретном случае я не думаю, что OP должен использовать этот подход.
2. @Interstellar_Coder Я знаю, но я предположил, что в OP все еще отсутствуют некоторые основы, поэтому я подумал, что упоминание HMVC (который также не является родным в CodeIgniter) было бы шагом вперед, но в этом нет необходимости, и это может привести к еще большей путанице. Тем не менее, большое спасибо за добавление.
Ответ №2:
1) Методы, записанные в одном контроллере, не могут быть доступны в других классах контроллеров. Я должен написать новую функцию для той же функциональности.
В чем заключается функциональность? Возможно, вам следует вместо этого написать библиотеку / помощник, логика контроллера должна быть ограничена потоком запросов или чем-то еще, но не слишком сложным. Для этого поместите функциональность в модель или, если более общий, в библиотеку / помощник.
2) Чтобы создать панель администрирования веб-сайта (серверную часть) ни в одной панели mvc, мы обычно создаем ее в новой папке. Возможно ли это в CodeIgniter? Если нет, то как насчет администратора (серверной части)??
Я не понимаю, не могли бы вы подробнее рассказать?
Комментарии:
1. Спасибо за ответ. Панель администратора означает раздел веб-сайта, Где контент и т. Д. Модифицируются Путем доступа к базе данных и т. Д. Например, мой сайт «mysite.com » а панель amdin — это «mysite.com/admin »
2. это происходит почти все время, оно должно обрабатываться только другим контроллером, как и другие. какая часть вас смущает?