Кстати, я хотел бы изменить поля администратора, начиная с того факта, что администратор является пользователем.
Но я хочу, чтобы администратор изменял только определенные поля, а не все поля, которые может иметь пользователь. Я хочу, чтобы админ изменил только свое имя пользователя, пароль и номер телефона.
Но при отображении появляются все поля, даже те, которые не нужны.
Вот мой formbuilder:
<?php
namespace Doctix\AdminBundle\Form;
use Doctix\UserBundle\Form\UserType;
use Doctix\UserBundle\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\Extension\Core\Type\PasswordType;
use Symfony\Component\Form\Extension\Core\Type\TelType;
class AdminType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('user', UserType::class);
}
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Doctix\AdminBundle\Entity\Admin'
));
}
}
И мой взгляд:
<div class="box_general padding_bottom">
{{ form_start(form,{'attr': {'id': 'form1'}}) }}
{% if form.user.username is defined %}
<div class="form-group">
<label for="inputEmail" class="col-md-2 control-label">Email</label>
<div class="col-md-10">
{{ form_widget(form.user.username, {'attr': {'class': 'form-control','placeholder':'Email'}}) }}
</div>
</div>
{% endif %}
{% if form.user.password is defined %}
<div class="form-group">
<label for="inputPassword" class="col-md-5 control-label">Mot de passe</label>
<div class="col-md-10">
{{ form_widget(form.user.password, {'attr': {'class': 'form-control','placeholder':'Password'}}) }}
</div>
</div>
{% endif %}
{% if form.user.numTel is defined %}
<div class="form-group">
<label for="inputPassword" class="col-md-5 control-label">N° Téléphone</label>
<div class="col-md-10">
{{ form_widget(form.user.numTel, {'attr': {'class': 'form-control','placeholder':'N° Téléphone'}}) }}
</div>
</div>
{% endif %}
{{ form_end(form) }}
</div>
<div class="panel-footer">
<div class="row">
<div class="col-md-offset-3 col-md-3">
<button class="btn btn-success btn-lg" form="form1"> Valider</button>
</div>
<div class="col-md-3">
<a href="{{ path('doctix_admin_users_parametre') }}" class=" btn btn-danger btn-lg">Annuler </a>
</div>
</div>
</div>
А вот изображение моего дисплея:
визуализация моей страницы
На картинке я хочу только первые 3 строки, а не следующие внизу. И что изменение при нажатии кнопки «Подтвердить» вступает в силу.
Наконец-то мой контроллер:
public function editprofilAction(Request $request){
$user = $this->getUser();
if($user===null){
throw new NotFoundHttpException('Utilisateur Inexistant');
}
else {
$em = $this->getDoctrine()->getManager();
$repo = $em->getRepository('DoctixAdminBundle:Admin');
$admin = $repo->findOneBy(array(
'user' => $user,
));
$form = $this->createForm('Doctix\AdminBundle\Form\AdminType', $admin);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$admin->getUser()->setSalt('');
$factory = $this->get('security.encoder_factory');
$encoder = $factory->getEncoder($admin->getUser());
$password_encoder = $encoder->encodePassword($admin->getUser()->getPassword(), $admin->getUser()->getSalt());
$admin->getUser()->setPassword($password_encoder);
$admin->getUser()->setRoles(array('ROLE_ADMIN'));
$em->flush();
// creation d'un flash bag pour une notification flash
$request->getSession()->getFlashBag()->add('Notice', 'Profil Modifié avec succés');
// redirection
$url = $this->generateUrl('doctix_admin_users_parametre');
// redirection permanente avec le status http 301 ::)))))
return $this->redirect($url,301);
}else{
return $this->render('DoctixAdminBundle:User:editprofil.html.twig', array(
'form' => $form->createView()
));
}
}
}
Большое спасибо.