2016-05-25 6 views
1

Мне нужно обновить пароль с помощью пароля sonata admin int fos userbundle 'bcrypt'.

Это мой админ класс,

<?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); 

    } 

Это мой пользователь объект,

<?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 
    } 

} 

Но я получаю эту ошибку вместо

Пытался позвонить неопределенная метод с именем «get» класса «AdminBundle \ Admin \ UserAdmin». Вы хотели позвонить? "getActiveSubClass", "getActiveSubclassCode", "getBaseCodeRoute", "getBaseControllerName", "getBaseRouteName", "getBaseRoutePattern", "getBatchActions", "getBreadcrumbs", "GetChild", "GetChildren", "GetClass", «getClassnameLabel », "Получить код", "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", «getPermissionsShow», «getPersistentParameter», «getPersistentParameters», «getRequest», «getRoot», «getRootCode», «getRouteBuilder», «getRouteGenerator», «getRouterIdParameter», «getRo Утес», "getSecurityHandler", "getSecurityInformation", "getShow", "getShowBuilder", "getShowFieldDescription", "getShowFieldDescriptions", "getShowGroups", "getShowTabs", "getSideMenu", "getSubClasses", "getSubject", «getTemplate», «getTemplates», «getTranslationDomain», «getTranslationLabel», «getTranslator», «getUniqid», «getUrlsafeIdentifier» или «getValidator»?

Было бы очень полезно, если кто-то сможет изучить его.

+1

Вы не должны обновить пароль в случае. Вы сэкономите много головных болей и проблем, если вы просто установите пароль, когда вам нужно его изменить; Пожалуйста, просмотрите это слайд-шоу: http://ocramius.github.io/doctrine-best-practices/#/47 –

+0

Большое спасибо за хедз-ап – vimuth

ответ

1

Вы не можете получить доступ к контейнеру с помощью $this->get('service.name') из класса admin сонаты. Вы должны использовать:

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

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

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

И сделайте себе одолжение и соблюдать соглашения об именах (getName вместо getname и т.д.)

 Смежные вопросы

  • Нет связанных вопросов^_^