Множественный action.class.php
У меня есть модуль, например, учетная запись. Конечно, вы найдете файл под названием acount/actions/action.class.php .
PHP-файл action.class.php становится все больше. Можно ли его продлить?
Для примера:
/account/action/action.class.php
/account/action/action2.class.php
Если это возможно, как выглядит код в action.class.php и в action2.class.php? И/или где я должен ввести что-то в конфигурационный файл?
Заранее спасибо!
Охотник за крафтом
4 answers
Действия Symfony могут быть объявлены в двух вариантах:
- Большой actios.class.php файл, который наследуется от sfActions
- Несколько xxxAction.class.php файл, который наследуется от sfAction
Оба в основном одинаковы, но их нельзя смешивать (вы должны решить, хотите ли вы 123123 файла, 1 за действие или один большой толстый файл).
Вот ссылка на symfony по этому вопросу: Фронтальный контроллер Symfony - Действия проверьте раздел Действий.
Похоже, класс действий становится слишком большим, потому что в нем слишком много вещей. Я бы предложил разбить его на несколько модулей или перенести соответствующие части логического кода в ваши модели.
Добавление включения для файла action2 - это не то, как предполагается использовать Symfony 1.4, и, скорее всего, просто приведет ко всевозможным другим головным болям.
PHP не поддерживает "частичные классы", такие как C#. Итак, у вас есть два варианта:
Создайте цепочку наследования, создав класс
baseActions
, который наследуется отsfAction
. Затем создайте свой классMainActions
, который наследуется отbaseActions
. Вы можете добавлять различные уровни наследования.Групповые функции в отдельных классах. Переопределите функцию
execute()
в файле действий и вручную вызовите функцию в нужном вам классе.
Также подумайте, относится ли какое-либо поведение, которое вы реализуете в действии (контроллер), к модели (или представлению) вместо этого. Если действительно принадлежит действию, просто следуйте совету гаймана и создайте действие для каждого класса, наследующего sfAction
.
Если у меня есть модуль CRUD , основанный на модели (сгенерированной CLI), и мне нужно определить дополнительные модели поведения для этой модели , я склонен создавать другой модуль , содержащий такое поведение. Например, рассматривая модель Article
. Я мог бы создать article
модуль для поведения CRUD (сгенерированного), article_support
для дополнительного поведения, такого как модерация, активация и т.д. и, возможно, article_ajax
для асинхронных запросов.