Генератор админки Symfony, ссылка на отфильтрованный результат - PullRequest
5 голосов
/ 31 мая 2011

У меня есть генератор администратора для следующей модели:

#schema.yml
Author:
  columns:
    name: { type: string(255), notnull: true }

Book:
  columns:
    authorId: { type: integer, notnull: true }
    title: { type: string(512), notnull: true }
    content: { type: string(512), notnull: true }
  relations:
    Author: { onDelete: CASCADE, local: authorId, foreign: id, foreignAlias: Books}

Я создал 2 страницы с соответствующими для каждой таблицы

php symfony doctrine:generate-admin backend Author
php symfony doctrine:generate-admin backend Book

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

#generator.yml for Author
# ...
    config:
      actions: ~
      fields:
      list:
        display: [id, name, _booksLink]
      filter:  ~
      form:    ~
      edit:    ~
      new:     ~

и

<!-- modules/author/templates/_booksLink.php -->
<a href="<?= link_to('book?author_id='.$author->getId()) ?>"><!-- how to select filter? -->
  See <?= $author->getName() ?> books
</a>

Спасибо

1 Ответ

5 голосов
/ 01 июня 2011

Эта лекция отвечает на ваш вопрос (слайд 39 и 40): http://www.slideshare.net/jcleveley/working-with-the-admin-generator

в ваших действиях. Php add:


class AuthorActions extends AutoAuthorActions
{
  public function executeViewBooks($request) { 
    $this->getUser()->setAttribute( 'book.filters',   
    array('authorId' => $request->getParameter('id')), 'admin_module' ); 
    $this->redirect($this->generateUrl('book')); 
  }
}

Примечание оcase: имя поля соответствует регистру, определенному в схеме.Например: если у вас есть authorId в схеме, вы должны написать authorId в функции выше (строка 5).Если у вас есть author_id в схеме, вы должны написать author_id в функции.Кроме того, имена модулей всегда в нижнем регистре с подчеркиванием (например: schema : MyBooks -> module name: my_books).

В вашем generator.yml

<code>
list: 
  object_actions:
    _edit: ~
    _delete: ~
    viewPhones: { label: View books, action: viewBooks } 
...