Помогите понять, как следующие рамки сочетаются друг с другом: - PullRequest
4 голосов
/ 08 октября 2010

Я только начинаю заниматься ООП и дизайном фреймворка.Я начал с использования следующих трех руководств:

http://net.tutsplus.com/tutorials/php/creating-a-php5-framework-part-1/

http://net.tutsplus.com/tutorials/php/create-a-php5-framework-part-2/

http://net.tutsplus.com/tutorials/php/create-a-php5-framework-part-3/

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

Во-первых, я понимаю основные понятия инфраструктуры, включая структуру каталогов.

Во-вторых, я понимаю, для чего предназначен реестр и класс базы данных (хотя япока не до конца понимаю все функции внутри них).

Моя проблема связана с файлами index.php, template.class.php и page.class.php.Я хорошо знаю, что должен делать каждый (хотя дальнейшие объяснения были бы хорошими!), Но я не понимаю, как они сочетаются друг с другом, например, как страница индекса взаимодействует с шаблоном и объектами страницы для создания отображаемой страницы.Я особенно не могу понять, в каком порядке все называется.

Индекс выглядит для меня следующим образом:

  • требуется класс реестра
  • создать экземпляр реестра (не совсем понятно - проще получить доступ к базе данных?)
  • сохранить базу данных и объекты шаблона
  • создает новое соединение из сохраненного объекта базы данных
  • выбрать обложку для страницы

Затем,и вот где я заблудился:

  • построить реальную страницу с помощью функции buildFromTemplates (которую я не могу придумать)
  • кэшировать запрос к базе данных
  • назначить вкладку (я совершенно заблудился относительно того, что такое тег!)
  • установить заголовок страницы
  • отображать содержимое

Может кто-нибудь помочь мне разобраться с этим?Я пробовал Zend до этого, но это было слишком сложно, этот более доступный, но, как вы можете, я все еще озадачен (хотя я начал понимать объекты FAR больше, пытаясь).

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 08 октября 2010

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

class Registry {

  protected static $_instances = array();

  public static function add($instance, $name) {
    self::$_instances[$name] = $instance;
  }

  public static function get($name) {
    return self::$_instances[$name];
  }
}

Registry в сочетании с Singleton - просто беспорядок.

Относительно аспектов, в которых вы потерялись:

1. buildFromTemplates Метод принимает неограниченное количество параметров func_get_args() в качестве местоположений файла шаблона, относительных или абсолютных. Если относительный (как в skins/ не является частью параметра send), перезаписать переменную, содержащую имя $bit, абсолютным местоположением. Если файл существует, читайте в переменной $content. Повторяйте до тех пор, пока не будут использованы все аргументы метода, и добавьте конечный результат в класс Page.

2. Кеш запросов Если данный запрос не возвращает resource_id (который должен выполнять запрос к базе данных), это означает, что запрос не был выполнен успешно, а метод вызывает ошибку. В противном случае сохраните resource_id в свойстве queryCache для дальнейшего использования. Например:

// assume $db is a reference to the database object and that this is the first
// query
$db->cacheQuery('SELECT * FROM whatever');
$results = $db->resultFromCache(0); // previous query resource_id

.... аааа, забудь об этом.

Это так запутано, я рекомендую вам начать с какой-то здравой основы, полезной для изучения внутренних работ. Как CodeIgniter, и двигаться дальше, когда эти понятия ясны.

Этот учебник полон неправильных решений, таких как ошибки вместо исключений, тесная связь, пользовательский шаблонизатор (где достаточно простого PHP) и многое другое.

Даже Symfony, который представляет собой большой фреймворк, не так сложно следовать по всем направлениям.

0 голосов
/ 08 октября 2010

Хорошо, это заняло у меня все последние две ночи и сегодня вечером (: -S), но я думаю, что у меня есть ответ, поэтому я опубликую его, чтобы посмотреть, поможет ли он кому-нибудь еще.

Я начну со строки «// соединение с базой данных»

  • установлено соединение с базой данных
  • кожа выбрана
  • Функция buildFromTemplates, выбранная из класса template.

Установите параметр для страницы, которую вы пытаетесь создать. Макет страницы, которую вы хотите создать, должен храниться в скинах> шаблоны> имя файла.

Конструктор, вызываемый при выполнении класса шаблона, затем инициирует новый экземпляр Page.

Затем эта функция buildFromTemplates принимает параметр, называемый именем файла, и затем извлекает содержимое из файла. Это будет храниться в переменной $ content.

  • Затем выполняется запрос к базе данных и выполняется функция cacheQuery
  • функция addTag для созданного вами объекта Page затем вызывается
  • затем устанавливается заголовок страницы

Наконец,

  • вызывается функция parseOutput, которая запускает функции replaceBits, replaceTags и parseTitle. Это заменяет соответствующий код, написанный на странице, которую вы пытаетесь создать.
  • Наконец содержимое выводится на страницу.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...