Symfony 1.4: библиотеки lib для модулей автозагрузки - PullRequest
0 голосов
/ 12 декабря 2011

как я могу автоматически загружать папки lib моих модулей в моих проектах Symfony 1.4? Возможно, вы знаете эту проблему:

Если я создаю плагины, я сохраняю базовые классы для действий моих модулей в папке lib. Каждый класс действий, хранящийся в actions/actions.class.php, наследуется от этого базового класса. Это позволяет переопределить действия плагина на уровне проекта:

myModule
   actions
      actions.class.php
   lib
      BasemyModuleActions.class.php

Но, к сожалению, Symfony не загружается BasemyModuleActions, и вы должны включить соответствующий файл вручную:

require_once(dirname(__FILE__) .'/lib/BasemyModuleActions.class.php');
class myModuleActions extends BasemyModuleActions
{
}

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

Есть ли способ добавить эти каталоги в автозагрузчик?

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

Совместимо ли ваше решение с задачей генерации форм Doctrine? То есть знает ли Symfony о существующей форме, или она будет создана снова, если она будет перемещена из lib/form/doctrine? (Нет проблем, если вы не можете ответить на этот вопрос. Но было бы хорошо, если вы знаете обходной путь в этом случае)

Ответы [ 2 ]

1 голос
/ 19 декабря 2014

Насколько я понимаю, это проблема курицы и яйца с автозагрузчиком и основным потоком контроллера.

Префикс: 1 в файле autoload.yml по умолчанию указывает, что эти классы доступны для автоматической загрузки, только если они находятся в текущем модуле.

Способ определения текущего модуля определяется с помощью actionStack.

Модуль / действие добавляется в actionStack после проверки, существует ли он.

К сожалению, чтобы определить, существует ли действие, symfony загружает actions.class.php

Следовательно, вам нужно иметь явное require_once.

Если вы избавляетесь от префикса: 1, и ваш модуль является частью вашего приложения (не загружается из плагина), вам не понадобится требование однажды.

Если модуль является частью плагина, вам нужно связываться с sfPluginConfiguration, чтобы он загружал соответствующие классы без префикса.

Оба метода проблематичны, так как могут быть конфликты между именами классов в различных модулях.

1 голос
/ 15 января 2012

Посмотрите на эту страницу:

http://www.symfony -project.org / ссылка / 1_4 / ен / 14-Other-Configuration-Files

Он описывает файл autoload.yml, который настраивает symfony для поиска классов в разных каталогах.

Symfony не может автоматически загружать мои / apps / app_name / lib /*.* классы, но делает это после создания файла / config / autoload.yml со следующим содержимым:

autoload:
  # project
  project:
    name:           project
    path:           %SF_LIB_DIR%
    recursive:      true
    exclude:        [model, symfony]

  project_model:
    name:           project model
    path:           %SF_LIB_DIR%/model
    recursive:      true

  # application
  application:
    name:           application
    path:           %SF_APP_LIB_DIR%
    recursive:      true

  modules:
    name:           module
    path:           %SF_APP_DIR%/modules/*/lib
    prefix:         1
    recursive:      true

Что описанная выше страница описывает как конфигурацию по умолчанию.

...