Показаны отношения 1: N и M: N с администратором Symfony 1.2.9 - PullRequest
0 голосов
/ 15 декабря 2009

Я использую Symfony 1.2.9 (с Propel ORM) для создания веб-сайта. Я начал использовать генератор администратора для реализации функций администратора. У меня возникают всевозможные проблемы с тем, чтобы администратор администратора отображал объект (блог), который имеет одно отношение 1: N (blogposts) и одно отношение N: M (blogroll).

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

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

В блоге есть от 0 до 1 роликов, от 0 до N сообщений в блоге. К каждому сообщению в блоге прикреплено от 0 до М комментариев. В настоящее время я могу просмотреть список блогов. Но я хочу добавить 2 взаимодействия (или ссылки), которые могут сделать меня:

  1. просмотр блога (список блогов, прикрепленных к блогу)
  2. просмотр списка блогов, прикрепленных к блогу.

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

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

1 Ответ

2 голосов
/ 15 декабря 2009

Почему бы вам не сделать это, как вы сами предложили в своем другом вопросе.

(Это опять-таки для Doctrine, но для Propel должно быть похоже).

Создайте действие объекта в вашем generator.yml:

list:
    object_actions:
      bloglist: {label: Bloglist}

Тогда в вашем actions.class.php вы должны добавить функцию:

public function executeListBloglist(sfWebRequest $request) {
    $blog = $this->getRoute()->getObject();

    // retrieve the blogposts via a PEER method (I don't have any clue about Propel ;))
    $this->blogposts = however.you.get.the.blogposts();
}

Затем создайте шаблон bloglistSuccess.php, в котором вы показываете сообщения.

Или вы можете перенаправить или переслать в модуль администратора для постов блога, если у вас есть такой модуль. Там вам, вероятно, придется переопределить действие списка, чтобы принять параметр идентификатора блога и расширить запрос для фильтрации сообщений по этому идентификатору блога.
Нет ничего плохого в том, чтобы сделать редирект или переадресацию, это не хак;)


Редактировать после комментария:

Я бы также предложил вам переслать запрос.
Нет, вам не нужно менять маршрут, вы можете просто добавить параметр, как вы предложили.

Для переопределения я пересмотрел, что было бы лучше, если бы вы переопределили метод buildQuery (снова). (Я не помню, как этот метод вызывался с Propel, надеюсь, вы понимаете, о чем я).

Так это будет выглядеть так:

class blogpostAdminActions extends autoBlogpostAdminActions 
{

  //...

  protected function buildQuery()
  {
     $query = parent::buildQuery();

     $request = $this->getRequest(); // <- I am not sure about this method call but there is one that gives you the webRequest.

     if ($request->hasParamter('blog_id'))
     {
        $query->andWhere('blog_id = ?', $request->getParameter('blog_id'));
     }

     return $query;
  }
}

Конечно, вы должны изменить это на критерии Propel, но я предполагаю, что вы можете сделать это;)
Надеюсь, это поможет вам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...