版本更新后没有带奏鸣曲管理员3.1的过滤器

时间:2016-07-01 12:24:48

标签: php symfony sonata-admin symfony-sonata sonata

我已将sonata admin捆绑包更新到3.1版本。从那时起,我再也没有过滤器了。有人有同样的问题吗?

这是我的classAdmin:



<?php

// src/CD/CarsBundle/Admin/ReservationsAdmin.php
// This code is made to custom the fields in the bloc 'Reservations' in the Admin Interface.

namespace CD\CarsBundle\Admin;

use Sonata\AdminBundle\Admin\Admin;
use Sonata\AdminBundle\Datagrid\DatagridMapper;
use Sonata\AdminBundle\Datagrid\ListMapper;
use Sonata\AdminBundle\Form\FormMapper;
use Sonata\AdminBundle\Show\ShowMapper;
use Sonata\AdminBundle\Route\RouteCollection;

/**
* 
*/
class ReservationsAdmin extends Admin
{
	
	// This code sets up the defaut sort column and order of the informations registered in this category.

	protected $datagridValues = array(
		'_sort_order' => 'ASC',
		'_sort_by' => 'id')
	;

	// This code configures the filters section on the right side of the 'Réservations' page when we click on 'Liste'.

	/**
	 * @param DatagridMapper $datagridMapper
	 */
	protected function configureDatagridFilters(DatagridMapper $datagridMapper)
	{
		$datagridMapper
			->add('id')
			->add('reserve', null, array('label' => 'Réservé'))
			->add('vehicules', null, array('label' => 'Véhicules - Immatriculation'), 'entity', array(
				'class' => 'CD\CarsBundle\Entity\Vehicules',
				'property' => 'immatriculation'
			))
			->add('heureDebut', null, array(
				'label' => 'Date et heure de début'), 'sonata_type_datetime_picker', array(
    			'format'                => 'dd-MM-yyyy',
    			'dp_side_by_side'       => true,
				'dp_use_current'        => false,
    			'dp_use_seconds'        => false,
    		))
    		->add('heureFin', null, array(
				'label' => 'Date et heure de fin'), 'sonata_type_datetime_picker', array(
    			'format'                => 'dd-MM-yyyy',
    			'dp_side_by_side'       => true,
				'dp_use_current'        => false,
    			'dp_use_seconds'        => false,
    		))
			->add('nomAgent', null, array('label' => 'Nom de l\'agent'))
			->add('prenomAgent', null, array('label' => 'Prénom de l\'agent'))
			->add('direction', null, array('label' => 'Direction'))
			//commented because not needed here ->add('commentaires', null, array('label' => 'Véhicule affecté et commentaires supplémentaires'))
		;
	}

	// This code configures the informations listed on the 'Réservations' page when we click on 'liste'

	/**
	 * @param ListMapper $listMapper
	 */
	protected function configureListFields(ListMapper $listMapper)
	{
		$listMapper
			->add('id')
			->add('vehicules', null, array('label' => 'Véhicules - Immatriculation'), 'entity', array(
				'class' => 'CD\CarsBundle\Entity\Vehicules',
				'property' => 'immatriculation'
			))
			->add('heureDebut', null, array('label' => 'Date et heure de début', 'format' => 'd-m-Y H:i'))
			->add('heureFin', null, array('label' => 'Date et heure de fin', 'format' => 'd-m-Y H:i'))
			->add('nomAgent', null, array('label' => 'Nom de l\'agent'))
			->add('prenomAgent', null, array('label' => 'Prénom de l\'agent'))
			->add('direction', null, array('label' => 'Direction'))
			->add('reserve', null, array(
				'label' => 'Réservé',
				'editable' => true
			))
			->add('annulation', null, array(
				'label' => 'Annulé',
				'editable' => true
			))
			->add('remisage', null, array(
				'label' => 'Remisage',
				'required'=> false,
				'editable' => true
			))
			//commented because not needed here ->add('commentaires', null, array('label' => 'Véhicule affecté et commentaires supplémentaires'))
			->add('_action', 'actions', array(
				'actions' => array(
					'show' => array(),
					'edit' => array(),
					'delete' => array(),
					'email' => array(
						'template' => 'CDCarsBundle:Reservations:list__action_email.html.twig'),
				)
			))
		;
	}

	// This code configures the fieds in the form to add a booking.

	/**
	 * @param FormMapper $formMapper
	 */
	protected function configureFormFields(FormMapper $formMapper)
	{
		$formMapper
			->with('Généralités')
				->add('heureDebut', 'date', array(
					'label' => 'Date et heure de début',
					'format' => 'dd-MM-yyyy H:i',
					'years' => range(\date("Y") - 0, \date("Y") + 2),
            	))
				->add('heureFin', 'date', array(
					'label' => 'Date et heure de fin',
					'format' => 'dd-MM-yyyy H:i',
					'years' => range(\date("Y") - 0, \date("Y") + 2),
            	))
			->end()
			->with('Agent')
				->add('nomAgent', null, array('label' => 'Nom de l\'agent'))
				->add('prenomAgent', null, array('label' => 'Prénom de l\'agent'))
				->add('dga', null, array('label' => 'D.G.A'))
				->add('direction', null, array('label' => 'Direction'))
				->add('email', null, array('label' => 'Email'))
			->end()
			->with('Demande')
				->add('besoin', null, array('label' => 'Besoin'))
				->add('nombrePersonne', null, array('label' => 'Nombre de personne'))
			->end()
			->with('Disponibilité')
				->add('reserve', null, array('label' => 'Réservé'))
				->add('annulation', null, array('label' => 'Annulé'))
			->end()
			->with('Remisage')
				->add('remisage', null, array('label' => 'Remisage'))
				->add('adresseRemisage', null, array('label' => 'Adresse'))
            	->add('dateDebutRemisage', null, array(
            		'label' => 'Du',
            		'format' => 'dd-MM-yyyy H:i',
					'years' => range(\date("Y") - 0, \date("Y") + 2),
				))
            	->add('dateFinRemisage', null, array(
            		'label' => 'au',
            		'format' => 'dd-MM-yyyy H:i',
					'years' => range(\date("Y") - 0, \date("Y") + 2),
            	))
            	->add('emailDirecteur', null, array('label' => 'Email du Directeur'))
			->end()
			->with('Destination')
				->add('destination', null, array('label' => 'Destination'))
			->end()
			->with('Motif')
				->add('motifRdv', null, array('label' => 'Rendez-vous'))
				->add('motifFormation', null, array('label' => 'Formation'))
				->add('motifReunion', null, array('label' => 'Réunion'))
				->add('motifCollecte', null, array('label' => 'Collecte'))
				->add('motifInstallation', null, array('label' => 'Installation'))
				->add('motifProgrammation', null, array('label' => 'Programmation'))
				->add('motifDepannage', null, array('label' => 'Dépannage'))
				->add('motifVad', null, array('label' => 'Visite à domicile'))
				->add('motifAutre', null, array('label' => 'Autre motif'))
			->end()
			->with('Conducteur')
				->add('conducteur', null, array('label' => 'Conducteur'))
			->end()
			->with('Mandataire')
				->add('mandataire', null, array('label' => 'Mandataire'))
				->add('nomMandataire', null, array('label' => 'Nom du mandataire'))
           		->add('prenomMandataire', null, array('label' => 'Prénom du mandataire'))
           		->add('emailMandataire', null, array('label' => 'Email du mandataire'))
            ->end()		
            ->with('Attestation')
				->add('honneur', null, array('label' => 'Attestation cochée'))
			->end()		
			->with('Informations supplémentaires')
				->add('commentaires', null, array('label' => 'Véhicule affecté et commentaires supplémentaires'))
				
				// Added 'choices' to be able to reach the vehiculesrepository to find the needed informations as known as the available vehicles depends on a specific date
				->add('vehicules', null, array(
					'label' => 'Véhicules - Immatriculation',
					'choices' => $this->getVehiculesRepository()->getAvailables($this->getEntity())
				),
				array(
					'class' => 'CD\CarsBundle\Entity\Vehicules',
					'property' => 'immatriculation'
				))
			->end()
		;
	}

	// This code configures what is shown on the 'Réservations' page when we click on 'afficher'.

	/**
	 * @param ShowMapper $showMapper
	 */
	protected function configureShowFields(ShowMapper $showMapper)
	{
		$showMapper
			->with('Généralités sur la réservation')
				->add('id')
				->add('heureDebut', 'date', array(
					'label' => 'Date et heure de début',
					'format' => 'd-M-y H:i'
				))
				->add('heureFin', 'date', array(
					'label' => 'Date et heure de fin',
					'format' => 'd-M-y H:i'
				))
			->end()
			->with('Agent')
				->add('nomAgent', null, array('label' => 'Nom de l\'agent'))
				->add('prenomAgent', null, array('label' => 'Prénom de l\'agent'))
				->add('dga', null, array('label' => 'D.G.A'))
				->add('direction', null, array('label' => 'Direction'))
				->add('email', null, array('label' => 'Email'))
			->end()
			->with('Demande')
				->add('besoin', null, array('label' => 'Besoin'))
				->add('nombrePersonne', null, array('label' => 'Nombre de personne'))
			->end()
			->with('Disponibilité')
				->add('reserve', null, array('label' => 'Réservé'))
				->add('annulation', null, array('label' => 'Annulé'))
			->end()
			->with('Remisage')
				->add('remisage', null, array('label' => 'Remisage'))
				->add('adresseRemisage', null, array('label' => 'Adresse'))
            	->add('dateDebutRemisage', null, array(
            		'label' => 'Du',
            		'format' => 'd-M-y H:i'
            	))
            	->add('dateFinRemisage', null, array(
            		'label' => 'au',
            		'format' => 'd-M-y H:i'
            	))
            	->add('emailDirecteur', null, array('label' => 'Email du Directeur'))
			->end()
			->with('Destination')
				->add('destination', null, array('label' => 'Destination'))
			->end()
			->with('Motif')
				->add('motifRdv', null, array('label' => 'Rendez-vous'))
				->add('motifFormation', null, array('label' => 'Formation'))
				->add('motifReunion', null, array('label' => 'Réunion'))
				->add('motifCollecte', null, array('label' => 'Collecte'))
				->add('motifInstallation', null, array('label' => 'Installation'))
				->add('motifProgrammation', null, array('label' => 'Programmation'))
				->add('motifDepannage', null, array('label' => 'Dépannage'))
				->add('motifVad', null, array('label' => 'Visite à domicile'))
				->add('motifAutre', null, array('label' => 'Autre motif'))
			->end()
			->with('Conducteur')
				->add('conducteur', null, array('label' => 'Conducteur'))
			->end()
			->with('Mandataire')
				->add('mandataire', null, array('label' => 'Mandataire'))
				->add('nomMandataire', null, array('label' => 'Nom du mandataire'))
           		->add('prenomMandataire', null, array('label' => 'Prénom du mandataire'))
           		->add('emailMandataire', null, array('label' => 'Email du mandataire'))
            ->end()	
            ->with('Attestation')
				->add('honneur', null, array('label' => 'Attestation cochée'))
			->end()		
			->with('Informations supplémentaires')
				->add('commentaires', null, array('label' => 'Véhicule affecté et commentaires supplémentaires'))
				->add('vehicules', null, array('label' => 'Véhicules - Immatriculation'), array(
					'class' => 'CD\CarsBundle\Entity\Vehicules',
					'property' => 'immatriculation'
				))
			->end()
			
		;
	}

	// Added a custom action in the listfields = email

	protected function configureRoutes(RouteCollection $collection)
	{
		$collection->add('email', $this->getRouterIdParameter().'cd_cars_reservations');
	}

	// Used to go to pin on the vehiculerepository

	/**
	 * @return \CD\CarsBundle\Entity\VehiculesRepository
	 */
	private function getVehiculesRepository()
	{
		return $this->getConfigurationPool()->getContainer()->get('doctrine')->getRepository('CDCarsBundle:Vehicules');
	}

	// Used to reach the enity

	private function getEntity()
	{
		return $this->getRoot()->getSubject();
	}

	
}
&#13;
&#13;
&#13;

实体:

&#13;
&#13;
# ORM for the "Reservations" entity with fields and mapping between database tables

CD\CarsBundle\Entity\Reservations:
    type: entity
    table: null
    repositoryClass: CD\CarsBundle\Entity\ReservationsRepository
    id:
        id:
            type: integer
            id: true
            generator:
                strategy: AUTO
    fields:
        heureDebut:
            type: datetime
        heureFin:
            type: datetime
        nomAgent:
            type: string
            length: 255
        prenomAgent:
            type: string
            length: 255
        dga:
            type: string
            length: 255
            nullable: true
        direction:
            type: string
            length: 255
        email:
            type: string
            length: 255
            nullable: true
        telephone:
            type: string
            length: 255
            nullable: true
        destination:
            type: text
        reserve:
            type: boolean
            nullable: true
        annulation:
            type: boolean
            nullable: true
        remisage:
            type: boolean
            nullable: true
        adresseRemisage:
            type: text
            nullable: true
        dateDebutRemisage:
            type: date
            nullable: true
        dateFinRemisage:
            type: date
            nullable: true
        emailDirecteur:
            type: string
            length: 255
            nullable: true
        conducteur:
            type: boolean
            nullable: true
        mandataire:
            type: boolean
            nullable: true
        motifRdv:
            type: boolean
            column: motif_rdv
            nullable: true
        motifFormation:
            type: boolean
            column: motif_formation
            nullable: true
        motifReunion:
            type: boolean
            column: motif_reunion
            nullable: true
        motifCollecte:
            type: boolean
            column: motif_collecte
            nullable: true
        motifInstallation:
            type: boolean
            column: motif_installation
            nullable: true
        motifProgrammation:
            type: boolean
            column: motif_programmation
            nullable: true
        motifDepannage:
            type: boolean
            column: motif_depannage
            nullable: true
        motifVad:
            type: boolean
            column: motif_vad
            nullable: true
        motifAutre:
            type: text
            column: motif_autre
            nullable: true
        commentaires:
            type: text
            nullable: true
        nombrePersonne:
            type: integer
            column: nombre_personne
            nullable: true
        besoin:
            type: string
            column: besoin
            nullable: true
        nomMandataire:
            type: string
            length: 255
            column: nom_mandataire
            nullable: true
        prenomMandataire:
            type: string
            length: 255
            column: prenom_mandataire
            nullable: true
        emailMandataire:
            type: string
            length: 255
            column: email_mandataire
            nullable: true
        honneur:
            type: boolean
            column: honneur
            nullable: true

    manyToOne:
        vehicules:
            targetEntity: Vehicules 
            inversedBy: reservations 
            joinColumn:
                name: vehicules_id
                referenceColumnName: id
            cascade:      [persist]

        user:
            targetEntity: Application\Sonata\UserBundle\Entity\User  
            inversedBy: reservations
            joinColumn:
                name: user_id
                referenceColumnName: id

        pool:
            targetEntity: Pool 
            inversedBy: reservations
            joinColumn:
                name: pool_id
                referenceColumnName: id
            cascade:      [persist]
                
    lifecycleCallbacks: {  }
&#13;
&#13;
&#13;

我的composer.json

&#13;
&#13;
{
	"name" : "cosylvestre/flotte",
	"license" : "proprietary",
	"type" : "project",
	"autoload" : {
		"psr-4" : {
			"" : "src/"
		}
	},
	"require" : {
		"php" : ">=5.3.9",
		"symfony/symfony" : "2.7.*",
		"doctrine/orm" : "^2.4.8",
		"doctrine/doctrine-bundle" : "~1.4",
		"symfony/assetic-bundle" : "~2.3",
		"symfony/swiftmailer-bundle" : "~2.3",
		"symfony/monolog-bundle" : "~2.4",
		"sensio/distribution-bundle" : "~4.0",
		"sensio/framework-extra-bundle" : "^3.0.2",
		"incenteev/composer-parameter-handler" : "~2.0",
		"sonata-project/admin-bundle" : "^3.1",
		"sonata-project/doctrine-orm-admin-bundle" : "3.0.4",
		"sonata-project/easy-extends-bundle" : "^2.1",
		"sonata-project/user-bundle" : "3.0.1",
		"sonata-project/core-bundle" : "^3.0"
	},
	"require-dev" : {
		"sensio/generator-bundle" : "~2.3",
		"symfony/phpunit-bridge" : "~2.7",
		"phpunit/phpunit" : "4.8.24",
		"doctrine/doctrine-fixtures-bundle" : "^2.3",
		"liip/functional-test-bundle" : "1.0.*"
	},
	"scripts" : {
		"post-install-cmd" : [
			"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
			"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
			"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
			"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
			"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
			"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
		],
		"post-update-cmd" : [
			"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
			"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
			"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
			"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
			"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
			"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
		]
	},
	"config" : {
		"bin-dir" : "bin",
		"platform" : {
			"php" : "5.3.9"
		}
	},
	"extra" : {
		"symfony-app-dir" : "app",
		"symfony-web-dir" : "web",
		"symfony-assets-install" : "relative",
		"incenteev-parameters" : {
			"file" : "app/config/parameters.yml"
		}
	}
}
&#13;
&#13;
&#13;

编辑页面时,我没有时间和分钟。我只有d-m-y。但我也需要h:m。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

Following the doc

  

默认情况下隐藏所有过滤器以节省空间。用户必须检查   他想要使用哪种过滤器。

     

要使过滤器始终可见(即使它处于非活动状态),请设置   参数show_filter为true。

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('phone')
        ->add('email', null, array(
            'show_filter' => true
        ))

        // ...
    ;
}

我会尝试设置'show_filter'选项....

对于您的小时和分钟,您必须使用datetime代替date字段类型