2015-10-26 3 views
2

Я только начал изучать MVC, и я довольно новый. Я хотел бы передать процедурный код к нему, но я боюсь (пожалуйста, никто не предлагает использовать Framework).MVC - место для общих функций?

Я могу понять, как это работает, но понимание отличается от того, что вы делаете. В моем процедурном коде у меня есть несколько функций, таких как message(). Они вызывается, если у пользователя нет разрешения на просмотр текущей страницы, например.

Моя проблема заключается в добавлении этого в MVC. Я добавил Twig до сих пор, и я сумел сделать некоторые Twig на главной странице, но используя функции, такие как сообщения, прежде чем было так же легко, как это:

message('Message Text'); 

Добавление его в каталог контроллера позволит его получить доступ к веб-странице, чего я не хочу. И через модель я не уверен, как это сделать, не требуя сначала файла. Я мог бы использовать функцию, но мне не нужны глобальные перемены, и отчасти это связано с тем, что я меняю.

Как правильно разместить обычно используемые функции?

Редактировать

Что я использую модифицированную версию этого: http://www.phpro.org/tutorials/Model-View-Controller-MVC.html

+0

Для выполнения этой задачи вы можете использовать наследование слоев.Вы также можете использовать помощники (в Интернете полно ссылок для этого) – Unex

ответ

1

Я склонен думать о традиционных MVC, как это:

Контроллер мой бизнес-логика для реализации мой продукт.
Модель представляет собой код для представления данных.
Вид, представляющий мой продукт.

В соответствии с этой парадигмой what represents my product - это то, что видит конечный пользователь. Итак, если это компонент UX, это часть представления.

Таким образом, это довольно легко понять, как использовать его:

  1. Вы могли use path/to/notifications.php, а затем $notifications = new Notifications(); где notifications.php класс облегчения сообщения, как вы ссылаетесь.
  2. Вы можете указать extends Notifications на ваш взгляд (или даже базовый вид!), Так что ЛЮБОЙ просмотр, который вы создаете, немедленно имеет доступ к вашему классу уведомлений.
  3. Вы могли бы (хотя, вероятно, не должны) require_once('path/to/notifications.php');, а затем класс или функции в нем были бы доступны. Опять же, вы, вероятно, не должны делать это таким образом

Суть заключается в следующем:

  • Поместите свой старый процедурный код в хорошо организованном классе. Его можно назвать чем-то вроде Notifications, если это то, что делает код. Главное - хорошо организовать, хорошо назовите, и не пытайтесь заставлять слишком много кода в одну вещь.
  • Используйте этот класс в своем коде. Вы можете явно использовать его пространство имен и new экземпляр его, или вы можете расширить его, чтобы привести его в качестве родительского класса вашего представления.
+0

В любой реализации MVC у вас, вероятно, будет своя проблема: как мы имеем дело с константами, общими функциями/методами и т. Д.? Общим подходом является использование «вспомогательных» классов (или модулей, файлов и т. Д.), Которые обеспечивают такую ​​функциональность. Другой - файл конфигурации. Другой - это настройка одиночных элементов и т. Д. В любой момент вам придется отказаться от файлов за пределами вашей модели, и это прекрасно. Как вы сказали, одной из «лучших» вещей MVC является то, что она ориентирована на модульное и разделенное представление из бизнес-логики. Это функциональность ориентирована больше, чем «файл». –

+0

Другими словами: 'require()' s являются точными, если вы используете их для продолжения программирования по «пути MVC» (я имею в виду: объекты, обмен сообщениями между ними, инкапсуляцию ** их характеристик ** и т. Д.), , Возможно, взглянуть на реализацию помощников CodeIgniter MVC (http://www.codeigniter.com/) даст некоторые идеи. Это в основном сочетание классов и процедурных функций в рамках. Однако он не «ломает» MVC для ** приложения **. –

+0

@rockerest Я попробовал вариант класса, как вы предложили, и я передал реестр через класс функций на странице index.php, когда загружаю маршрутизатор .etc. Я не совсем доволен загрузкой, но на самом деле меня поразила обрабатывающая сторона, когда она была загружена. – Chris98

Смежные вопросы