Несколько action.class.php - PullRequest
5 голосов
/ 27 июля 2011

У меня есть модуль, например учетная запись. Конечно, вы найдете файл с именем 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? И / или где я должен что-то ввести в config-ymal-файл?

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

Craphunter

Ответы [ 4 ]

7 голосов
/ 27 июля 2011

Действия Symfony можно объявлять в двух вариантах:

  1. Большой файл actios.class.php, который наследуется от sfActions
  2. Множественный файл xxxAction.class.php, который наследуется от sfAction.

Они в основном одинаковы, но их нельзя смешивать (вы должны решить, хотите ли вы 123123 файла, 1 на действие или один большой толстый файл).

Здесь этоСсылка Symfony по этому вопросу: Фронт-контроллер Symfony - Действия проверьте раздел Действие.

4 голосов
/ 27 июля 2011

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

Добавление включения для файла action2 - это не то, как Symfony 1.4 предназначен для использования, и, скорее всего, просто приведет к другим видам головной боли.

1 голос
/ 27 июля 2011

Также рассмотрите, относится ли какое-либо поведение, которое вы реализуете в действии (контроллер), к модели (или представлению). Если действительно принадлежит действию, просто следуйте советам Гимана и создайте действие для каждого класса, наследуя sfAction.

Если у меня есть модуль CRUD , основанный на модели (как сгенерировано CLI), и я должен определить дополнительные поведения для этой модели , Я склонен создавать еще один модуль , который будет содержать это поведение. Например, с учетом модели Article. Я мог бы создать article модуль для поведения CRUD (сгенерированный), article_support для дополнительных действий, таких как модерация, активация и т. Д. И, возможно, article_ajax для асинхронных запросов.

1 голос
/ 27 июля 2011

PHP не поддерживает «частичные классы», такие как C #.Таким образом, у вас есть два варианта:

  • Создать цепочку наследования, создав класс baseActions, который наследуется от sfAction.Затем создайте свой класс MainActions, который наследуется от baseActions.Вы можете добавить разные уровни наследования.

  • Группировать функции в отдельных классах.Переопределите функцию execute() в файле действий и вручную вызовите функцию для нужного вам класса.

...