SonataUserBundle überschreibt das Formularprofil
Ich verwende SonataUserBundle und versuche, das Formular zum Bearbeiten des Profils zu überschreiben, bin mir jedoch nicht sicher, ob es sich um die services.yml und die config.yml handelt. Hier ist der Code.
ProfileType.php
namespace Application\Sonata\UserBundle\Form\Type;
use Symfony\Component\Form\FormBuilderInterface;
use Sonata\UserBundle\Form\Type\ProfileType as BaseType;
class ProfileType extends BaseType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
parent::buildForm($builder, $options);
$builder->add('ciudad', null, array('label' => 'Ciudad'));
$builder->add('file', 'file', array('required' => false, 'label' => 'Subir Foto'));
}
public function getName()
{
return 'sonata_user_profile';
}
}
ProfileFormHandler.php
<?php
namespace Application\Sonata\UserBundle\Form\Handler;
use Sonata\UserBundle\Model\UserInterface;
use Sonata\UserBundle\Form\Handler\ProfileFormHandler as BaseHandler;
class ProfileFormHandler extends BaseHandler
{
public function process(UserInterface $user)
{
$this->form->setData($user);
if ('POST' == $this->request->getMethod()) {
$this->form->bindRequest($this->request);
if ($this->form->isValid()) {
$nombreArchivoFoto = uniqid().$user->getId() . '-' . $user->getUsername() . '-foto-perfil.jpg';
$user->upload($nombreArchivoFoto);
$this->onSuccess($user);
return true;
}
$this->userManager->reloadUser($user);
}
return false;
}
}
services.yml
services:
sonata_user.registration.form.type:
class: Application\Sonata\UserBundle\Form\Type\RegistrationFormType
arguments: [%fos_user.model.user.class%]
tags:
- { name: form.type, alias: sonata_user_registration }
sonata_user.profile.form.type:
class: Application\Sonata\UserBundle\Form\Type\ProfileType
arguments: [%fos_user.model.user.class%]
tags:
- { name: form.type, alias: sonata_user_profile }
sonata_user.form.handler.profile:
class: Application\Sonata\UserBundle\Form\Handler\ProfileFormHandler
arguments: ["@fos_user.profile.form", "@request", "@fos_user.user_manager"]
scope: request
public: false
Config.yml
fos_user:
db_driver: orm
firewall_name: main
user_class: Application\Sonata\UserBundle\Entity\User
registration:
form:
type: application_sonata_user_registration
profile:
form:
type: fos_user_profile
handler: fos_user.profile.form.handler.default
name: fos_user_profile_form
validation_groups: [Authentication]
sonata_user:
security_acl: false
class:
user: Application\Sonata\UserBundle\Entity\User
group: Application\Sonata\UserBundle\Entity\Group
profile:
form:
type: sonata_user_profile
handler: sonata_user.form.handler.profile
name: sonata_user_profile_form
validation_groups: [Profile]
Wenn ich die obigen Einstellungen verwende, erhalte ich die nächste Ausnahme
ErrorException: Laufzeithinweis: Anwendungsdeklaration \ Sonata \ UserBundle \ Form \ Handler \ ProfileFormHandler :: process () sollte mit Sonata \ UserBundle \ Form \ Handler \ ProfileFormHandler :: process (FOS \ UserBundle \ Model \ UserInterface $ user) kompatibel sein in Zeile D: \ xampp \ htdocs \ misplanes.dev \ src \ Application \ Sonata \ UserBundle \ Form \ Handler \ ProfileFormHandler.php 8
Und wenn ich die services.yml ändere
arguments: ["@sonata_user.profile.form", "@request", "@fos_user.user_manager"]
anstatt
arguments: ["@fos_user.profile.form", "@request", "@fos_user.user_manager"]
Ich bekomme die nächste Ausnahme
ServiceNotFoundException: Der Dienst "sonata.user.profile.form.handler" ist abhängig von einem nicht vorhandenen Dienst "sonata_user.profile.form".
Ich weiß nicht genau, wo der Fehler liegt. Ich habe viele Konfigurationen ausprobiert und verschiedene Foren und Blogs gelesen, aber ich habe keine Lösung gefunden. Ich werde Ihre Hilfe sehr schätzen. Vielen Dank