Надеюсь, я смогу задать этот вопрос без раздражения или дать кому-то головную боль. Я новичок в Symfony и пытаюсь оборачивать вокруг себя все.Symfony2 Объекты с расширенными классами хранилища
Вот что я хочу сделать: В связке называется CalendarBundle У меня есть Event
Entity где Repository класс выглядит следующим образом:
class EventRepository extends EntityRepository
{
/**
* @param $start
* @param $end
* @return array $events_array
*/
public function queryByRange($start = "", $end = "")
{
// set start and end to this month if empty
$start = ($start == "")
? date('Y-m-d H:i:s', mktime(0, 0, 0, date('m'), 1, date('Y')))
: $start;
$end = ($end == "")
? date('Y-m-d H:i:s', mktime(0, 0, 0, date('m'), date('t'), date('Y')))
: $end;
$query = $this->createQueryBuilder('e')
->where('e.start > :start')
->andWhere('e.end < :end')
->setParameter('start', $start)
->setParameter('end', $end)
->orderBy('e.start', 'ASC');
return $query;
}
/**
* @param string $start
* @param string $end
* @return array
*/
public function findByRange($start = "", $end = "")
{
// set start and end to this month if empty
$start = ($start == "")
? date('Y-m-d H:i:s', mktime(0, 0, 0, date('m'), 1, date('Y')))
: $start;
$end = ($end == "")
? date('Y-m-d H:i:s', mktime(0, 0, 0, date('m'), date('t'), date('Y')))
: $end;
$events = $this->queryByRange($start, $end)->getQuery()->getResult();
$events_array = array();
$prev_date = '';
foreach($events as $event) {
$start = $event->getStart()->format('Ymj');
if ($prev_date == $start) {
$events_array[$prev_date][] = $this->eventToArray($event);
} else {
$events_array[$start][] = $this->eventToArray($event);
}
$prev_date = $start;
}
return $events_array;
}
/**
* @param Event $event
* @return array
*/
private function eventToArray(Event $event)
{
return array(
'item' => array(
'id' => $event->getId(),
'name' => $event->getName(),
'description' => $event->getDescription(),
'type' => $event->getType(),
'status' => $event->getStatus(),
'start' => $event->getStart()->format('Ymd H:i:s'),
'end' => $event->getEnd()->format('Ymd H:i:s'),
),
);
}
}
То, что я пытаюсь выполнить, чтобы расширить эту базу событие Сущность с несколькими более конкретными событиями, добавляющими разные метаданные событий для каждого из них. Я полагаю, что функция queryByRange
должна быть переписана для получения метаданных, а также функция eventToArray
.
Позже я показываю события, используя разные шаблоны ветви, используя тип элемента «Событие», чтобы принять решение о используемых шаблонах.
Теперь то, что дает мне головную боль. Потому что я не знаю, что события, которые могут существовать, я хочу использовать этот класс EventRepository при получении всех видов событий в контроллере, как это:
$repository = $this->getDoctrine()->getRepository('AcmeCalendarBundle:Event');
$events = $repository->findByRange($start, $end);
и правильный расширенный класс используется автомагический для запроса и возврата Мероприятия.
Я нашел, что this question where extending Bundles был правильным способом для этого. Но я не думаю, что это решает мой вопрос.
Удивительный! Я проведу способ метафайла событий в разных таблицах, но если это невозможно, будет выполняться одна таблица. Спасибо! – pusle
Возможно, просто прочитайте документы по ссылке выше –
Захватывающие возможности! Я не знал об этом :) нашел пример наследования таблицы классов здесь, что я буду тестировать позже: https://gist.github.com/Problematic/983982 – pusle