2015-05-07 4 views
1

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

И я установил пакет администрирования sonataMongoDB для создания моей части администратора. Приложение онлайн-Quizzer на самом деле у меня есть документ User, который ссылается на многие документы Quizz. когда я показываю список пользователей, мне нужно, чтобы поле викторины стало кликабельным, чтобы войти в викторину и посмотреть результаты.

Вот код функции ConfigureListFields:Sonata Admin Bundle clickable Field

protected function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper 
    ->addIdentifier('email') 
    ->add('firstName') 
    ->add('lastName') 
    ->add('quizz', null, array('label' => 'Quiz Passd : Result')) 

    ->add('_action', 'actions', array(
     'actions' => array(
      'inscription' => array('template' => 'ATSAdminBundle:CRUD:list__action_inscription.html.twig'), 
      'edit' => array(), 
      ) 
     )) 
    ; 
} 

А вот как я получаю мою викторину объекта:

public function __toString() 
{ 
    return $this->getResult() ; 
} 

Но я хочу, чтобы Quiz поле стало не активируется отображение как простая строка ,

ответ

0

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

{% block field %} 
<div> 
    {% foreach object.quizzes as quizz %} 
    .... 
    {% foreach %} 
</div> 
{% endblock %} 

См https://sonata-project.org/bundles/doctrine-orm-admin/master/doc/reference/list_field_definition.html#custom-template

Если Quizz является одной связанной объект вам нужен только один класс администратора для Quizz и разрешите правило show или edit. По умолчанию Sonata будет ссылаться на правило edit. Поэтому, если у вас нет роли для редактирования Quizz, ничего не будет связано. Возможно, это ваша главная проблема.

Если это ваш случай, попробуйте этот кусок кода verfiy его:

->add('quizz', null, array('label' => 'Quiz Passd : Result', 'route' => 'show')) 

И последнее, но не в последнюю очередь это более распространено, чтобы связать с show маршрутов внутри шоу зрения родительского объекта. Вы можете добавить свой Quizz (ы) в меню закладки:

protected function configureTabMenu(MenuItemInterface $menu, $action, AdminInterface $childAdmin = null) 
{ 
    $menu->addChild($this->trans('Quizzes'), array(
     'uri' => $admin->generateUrl('sonata.admin.quizz.list', array('id' => $id)), 
    )); 
} 
Смежные вопросы