Symfony2: le remplacement des créeaction() dans SonataAdmin
J'ai cherché sur google comme un fou les derniers jours à essayer de comprendre (sans succès) comment remplacer un SonataAdmin d'action pour la capture de la session nom d'utilisateur et de l'enregistrer dans le champ de clé étrangère.
AttachmentAdminController classe:
<?php
namespace Application\Sonata\UserBundle\Controller;
use Sonata\AdminBundle\Controller\CRUDController as Controller;
#use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use FOS\UserBundle\Entity\User;
use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Bridge\Monolog\Logger;
use Mercury\CargoRecognitionBundle\Entity\Attachment;
class AttachmentAdminController extends Controller
{
/**
* (non-PHPdoc)
* @see Sonata\AdminBundle\Controller.CRUDController::createAction()
*/
public function createAction()
{
$result = parent::createAction();
if ($this->get('request')->getMethod() == 'POST')
{
$flash = $this->get('session')->getFlash('sonata_flash_success');
if (!empty($flash) && $flash == 'flash_create_success')
{
#$userManager = $this->container->get('fos_user.user_manager');
#$user = $this->container->get('context.user');
#$userManager = $session->get('username');
$user = $this->container->get('security.context')->getToken()->getUser()->getUsername();
$attachment = new Attachment();
$attachment->setPath('/tmp/image.jpg');
$attachment->setNotes('nothing interesting to say');
$attachment->getSystemUser($user);
$em = $this->getDoctrine()->getEntityManager();
$em->persist($product);
$em->flush();
}
}
return $result;
}
}
service de l'attachement:
mercury.cargo_recognition.admin.attachment:
class: Mercury\CargoRecognitionBundle\Admin\AttachmentAdmin
tags:
- { name: sonata.admin, manager_type: orm, group: General, label: Attachments }
arguments: [ null, Mercury\CargoRecognitionBundle\Entity\Attachment, "SonataAdminBundle:CRUD" ]
Me semble que le actionController() est ignoré par SonataAdminBundle (et peut-être de l'ensemble de la classe file), car il n'y a pas de messages d'erreur, mais je ne sais pas pourquoi. En fait, je ne suis pas sûr si je suis aller chercher le nom d'utilisateur de la session.
J'ai vraiment besoin d'un bon tutoriel à ce sujet, mais il semble que toutes les informations que je reçois à ce sujet est obsolète dans certains aspects. En passant, je suis en utilisant Symfony 2.0.16
Je ne suis pas sûr de ce que tu veux dire avec "la carte des entités". Vous avez raison à propos de l'utilisation de l'utilisateur.id de la clé étrangère, il a été ma principale préoccupation depuis le début, en fait, j'ai ajouté une doctrine de la requête pour trouver l'ID utilisateur de la session nom d'utilisateur et cela fonctionne, mais... Mon dernier problème avec remplacement créeaction (), c'est que je suis de la génération de deux objets et à cet effet, deux enregistrements dans la table (un enregistrement de la forme, sans FK, et un autre codé en dur, avec un FK). Je suis en train de lire à propos de l'Écouteur d'Événement à l'aide d'un prePersist() la méthode, cause j'ai juste BESOIN d'un enregistrement, avec l'ID de l'utilisateur connecté dans la clé étrangère.
OriginalL'auteur abiyi | 2012-08-13
Vous devez vous connecter pour publier un commentaire.
Enfin je suis arrivé à la solution. Je suis sûr qu'il en existe d'autres (comme l'utilisation des écouteurs d'événement, par exemple, qui semble être plus simple), mais pour l'instant c'est le meilleur que j'ai pu trouver (il fonctionne, et c'est ce qui compte).
J'ai essayé de remplacer le
createAction()
basé sur des exemples que j'ai trouvé dans un autre fil de discussion, mais j'ai été faire deux enregistrements dans la table au lieu d'un seul. La chose la plus importante était de substitution de l'ENSEMBLE de la méthode d'action et de mettre le code personnalisé.Contrôleur:
Service pour le contrôleur:
J'ai pris la solution à partir des sites suivants:
(Et la Sonate de la documentation de Projet)
OriginalL'auteur abiyi
Il pourrait être utile de remplacer uniquement la créez au préalable crochet avec votre propre logique:
OriginalL'auteur Sebastian Viereck