Обмен данными между контроллерами Codeigniter

#model-view-controller #codeigniter #controller

#модель-представление-контроллер #codeigniter #контроллер

Вопрос:

Я новичок в MVC, CodeIginter. Вместо того, чтобы упростить задачу, для простого приложения требуется написать много кода. Это может произойти, потому что я новичок. Так что у меня мало путаницы в этом вопросе. Приветствуется любая помощь.
1) Методы, записанные в одном контроллере, не могут быть доступны в других классах контроллеров. Я должен написать новую функцию для той же функциональности.

2) Чтобы создать панель администрирования веб-сайта (серверную часть) ни в одной панели mvc, мы обычно создаем ее в новой папке. Возможно ли это в CodeIgniter? Если нет, то как насчет администратора (серверной части)??

Ответ №1:

Давайте попробуем развеять некоторые ваши сомнения по этому поводу.

1) Вызов метода контроллера с другого контроллера невозможен, и, кстати, это имеет значение.

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

Затем модель возвращает результат этой обработки контроллеру, который, в свою очередь, решает, в какое представление передать эти результаты.

Представление, в конечном счете, структурировано для получения этих данных и их отображения.

ИТАК, как вы можете видеть, вызов метода контроллеров с другого контроллера — это нонсенс, это все равно что перейти на страницу и вместо этого найти другую; если вы хотите передать запрос другому контроллеру … что ж, для этого есть перенаправление.

Если вы обнаружите, что у вас одинаковые функциональные возможности в несколько раз, подумайте дважды:

  1. Что такое функциональность? Вы имеете в виду что-то вроде «отображать сообщения» в контроллере «архив» и «отображать сообщения» в контроллере «новости»? вряд ли они обладают одинаковой функциональностью; возможно, они могут совместно использовать представления или модели, но это все.
  2. Для функций, которые не связаны с 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. это происходит почти все время, оно должно обрабатываться только другим контроллером, как и другие. какая часть вас смущает?