2016-05-25 6 views
1

Ich muss das Passwort mit Sonata Admin Int fos Userbundle 'bcrypt' Passwort zu aktualisieren.

Dies ist meine Admin-Klasse,

<?php 

namespace AdminBundle\Admin; 

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

class UserAdmin extends Admin { 
    public function postPersist($object) { 
     $userManager = $this->get('fos_user.user_manager'); 
     $user = $userManager->findUserBy(array('id'=>$object->id)); 
     $user->setPlainPassword('test'); 
     $userManager->updateUser($user); 

    } 

Das ist meine Benutzereinheit ist,

<?php 

// src/AppBundle/Entity/User.php 

namespace AdminBundle\Entity; 

use FOS\UserBundle\Model\User as BaseUser; 
use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\Entity 
* @ORM\Table(name="fos_user") 
*/ 
class User extends BaseUser { 

    /** 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="telephone", type="text", length=30, nullable=false) 
    */ 
    private $telephone; 

    /** 
    * Set nonotification 
    * 
    * @param text $telephone 
    * @return User 
    */ 
    public function settelephone($telephone) { 
     $this->telephone = $telephone; 

     return $this; 
    } 

    /** 
    * Get telephone 
    * 
    * @return text 
    */ 
    public function gettelephone() { 
     return $this->telephone; 
    } 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="text", length=60, nullable=false) 
    */ 
    private $name; 

    /** 
    * Set nonotification 
    * 
    * @param text $name 
    * @return User 
    */ 
    public function setname($name) { 
     $this->name = $name; 

     return $this; 
    } 

    /** 
    * Get name 
    * 
    * @return text 
    */ 
    public function getname() { 
     return $this->name; 
    } 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="surname", type="text", length=60, nullable=false) 
    */ 
    private $surname; 

    /** 
    * Set nonotification 
    * 
    * @param text $name 
    * @return User 
    */ 
    public function setsurname($surname) { 
     $this->surname = $surname; 

     return $this; 
    } 

    /** 
    * Get surname 
    * 
    * @return text 
    */ 
    public function getsurname() { 
     return $this->surname; 
    } 

    public function __construct() { 
     parent::__construct(); 
     // your own logic 
    } 

} 

Aber ich bin immer diesen Fehler stattdessen

Versuchte eine undefinierte anrufen Methode mit dem Namen "get" der Klasse "AdminBundle \ Admin \ UserAdmin". Hast du vor, z.B. "getActiveSubClass", "getActiveSubclassCode", "getBaseCodeRoute" "getBaseControllerName", "getBaseRouteName", "getBaseRoutePattern" "getBatchActions", "getBreadcrumbs", "getChild", "getChildren" "getClass", „getClassnameLabel “, "getCode", "getConfigurationPool" "getCurrentChild", "getCurrentChildAdmin", "getDataSourceIterator" "getDatagrid", "getDatagridBuilder", "getExportFields" "getExportFormats", "getExtensions", "getFilterFieldDescription" "getFilterFieldDescriptions", "getFilterParameters", "getFilterTheme", "getForm", "getFormBuilder", "getFormContractor", "getFormFieldDescription", "getFormFieldDescriptions", "getFormGroups", "GetFormTabs", "getFormTheme", "getIdParameter" "getLabel", "getLabelTranslatorStrategy", "getList", "getListBuilder" "getListFieldDescription", "getListFieldDescriptions" "getManagerType", "getMaxPageLinks", "getMaxPerPage" , "getMenuFactory", "getModelManager", "getNewInstance" "getNormalizedIdentifier", "getObject", "getObjectIdentifier" "getObjectMetadata", "getParent", "getParentAssociationMapping" "getParentFieldDescription", "getPerPageOptions" "getPersertsShow", "getPersistentParameter", "getPersistentParameters", "getRequest", "getRoot", "getRootCode", "getRouteBuilder", "getRouteGenerator", "getRouterIdParameter", "getRo nuten“, "getSecurityHandler", "getSecurityInformation" "getShow", "getShowBuilder", "getShowFieldDescription" "getShowFieldDescriptions", "getShowGroups", "getShowTabs" "getSideMenu", "getSubClasses", "getSubject", "getTemplate", "getTemplates", "getTranslationDomain", "getTranslationLabel", "getTranslator", "getUniqid", "getUrlsafeIdentifier" oder "getValidator"?

Es wäre eine große Hilfe, dass jemand sich damit befassen kann.

+1

Sie sollten kein Passwort in einem Ereignis werden zu aktualisieren. Sie sparen sich viele Kopfschmerzen und Probleme, wenn Sie einfach das Passwort einstellen, wenn Sie es ändern müssen; Bitte überprüfen Sie diese Diashow: http://ocramius.github.io/doctrine-best-practices/#/47 –

+0

Vielen Dank für die Köpfe hoch – vimuth

Antwort

1

Sie können nicht auf den Container mit $this->get('service.name') aus einer Sonaten-Admin-Klasse zugreifen. Sie sollten verwenden:

$container = $this->getConfigurationPool()->getContainer(); 
$userManager = $container->get('fos_user.user_manager'); 

Auch ich weiß nicht, ob Ihre Lösung trotzdem funktionieren würde.Ich würde so etwas wie folgt verwenden:

public function postPersist($object) { 
    $container = $this->getConfigurationPool()->getContainer(); 
    $entityManager = $container->get('doctrine.orm.entity_manager'); 
    $object->setPlainPassword('test'); 
    $entityManager->persist($user); 
    $entityManager->flush(); 
} 

Und tun Sie sich selbst einen Gefallen und respektieren Sie die Namenskonventionen (getName statt getname usw.)

Verwandte Themen