Sonata admin bundle, manipulate objects

前端 未结 2 1711
天命终不由人
天命终不由人 2021-01-26 17:55

I have 2 entities with one to many relationship project and prototype And I\'ve been looking for a way to list the prototypes that belong to a project in the show action . here

相关标签:
2条回答
  • 2021-01-26 18:14

    I found a way to resolve the problem but still I feel it's not the better way I created a controller and overrided the showAction

    <?php
    
    
    namespace AppBundle\Controller;
    
    
    use Sonata\AdminBundle\Route\RouteCollection;
    use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
    use Sonata\AdminBundle\Controller\CRUDController as Controller;
    use Symfony\Component\HttpFoundation\RedirectResponse;
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
    
    class CRUDController extends Controller
    {
    
        public function showAction($id = null)
        {
            return $this->redirect($this->generateUrl('admin_app_prototype_list', array(
            'filter[projet__id][value]'=>$id
        )));
        }
    }
    

    Then I get a list of prototypes that belong to a project.

    0 讨论(0)
  • 2021-01-26 18:30

    One way is to define the template for your prototypes field in showMapper

    protected function configureShowFields(ShowMapper $showMapper)
    {
        $showMapper ->add('prototypes',null, array('template' => 'NamespaceYourBundle::Admin/prototypes.html.twig'));
    
    }
    

    Create Admin folder in your bundle's resources folder and create prototypes.html.twig file ,extend your twig template with sonata's base_show_field.html.twig template and in {% block field %} define your own markup looping through all related prototypes

    {% extends 'SonataAdminBundle:CRUD:base_show_field.html.twig' %}
    {% block field %}
        {% spaceless %}
            {% if object.getPrototypes() is not empty %}
                <table class="table table-bordered table-striped">
                <thead>
                <tr class="sonata-ba-list-field-header">
                <th class="sonata-ba-list-field-header-text">Nom</th>
                <th class="sonata-ba-list-field-header-text">Description</th>
                    ...
                    ...
                    ...
                </tr>
                </thead>
                <tbody>
                {% for prototype in object.getPrototypes() %}
                <tr>
                    <td class="sonata-ba-list-field sonata-ba-list-field-text">{{ prototype.getNom() }}</td>
                    <td class="sonata-ba-list-field sonata-ba-list-field-text">{{ prototype.getDescription() }}</td>
                    ...
                    ...
                    ...
                </tr>
                {% endfor %}
                </tbody>
                </table>
            {% endif %}
        {% endspaceless %}
    {% endblock %}
    
    0 讨论(0)
提交回复
热议问题