Symfony 4 Fos User Bundle

244
29 августа 2018, 22:40

Сделал регистрацию на FosUserBundle Symfony 4.1 Создал отдельный контроллер и view, регистрация работает и доступна по ссылке site/register

НО! Мне надо сделать, что бы регистрация была в модальном окне, и работала с каждой страницы. Вывел форму через

{{ render(controller('App\\Controller\\RegistrationController::register')) }} 

в base.html.twig форма отображается, но при отправки формы пользователь в БД не добавляется, RegistrationController не срабатывает. Прошу помочь с данной проблемой.

Answer 1

Вопрос решён. Добавил параметр action при создании формы в контроллере

$form = $this->createForm(UserType::class, $user,
            ['action' => $this->generateUrl('user_registration')]);

В итоге получилось так:

RegistrationController:

namespace App\Controller;
use App\Entity\User;
use App\Form\UserType;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
class RegistrationController extends Controller
{
    /**
     * @Route("/register", name="user_registration")
     */
    public function register(Request $request, UserPasswordEncoderInterface $passwordEncoder)
    {
        // 1) build the form
        $user = new User();
        $form = $this->createForm(UserType::class, $user,
            ['action' => $this->generateUrl('user_registration')]);
        // 2) handle the submit (will only happen on POST)
        $form->handleRequest($request);
        if($form->isSubmitted() && $form->isValid()) {
            // 3) Encode the password (you could also do this via Doctrine listener)
            $password = $passwordEncoder->encodePassword($user, $user->getPlainPassword());
            $user->setPassword($password);
            // 4) save the User!
            $entityManager = $this->getDoctrine()->getManager();
            $entityManager->persist($user);
            $entityManager->flush();
            // ... do any other work - like sending them an email, etc
            // maybe set a "flash" success message for the user
            return $this->redirectToRoute('mainPage');
        }
        return $this->render(
            'registration/register.html.twig',
            array('form' => $form->createView())
        );
    }
}

register.html.twig:

{{ form_start(form) }}
    <div class="modal-body">
        {{ form_row(form.username) }}
        {{ form_row(form.email) }}
        {{ form_row(form.plainPassword.first) }}
        {{ form_row(form.plainPassword.second) }}
    </div>
    <div class="modal-footer">
        <button type="submit" class="button button-bordered m-auto">Зарегистрироваться</button>
    </div>
{{ form_end(form) }}

И используем просто через рендер контроллера на любой странице:

{{ render(controller('App\\Controller\\RegistrationController::register')) }}
READ ALSO
Вывести php переменную в html которая в echo

Вывести php переменную в html которая в echo

Этот html код находиться в echo, как тут правильно вывеести переменную которая $result?

245
PHP REST API Авторизация для Android

PHP REST API Авторизация для Android

Какие есть подходы для реализации авторизации на стороне PHP из Android приложенияЯ не совсем понимаю серверную часть

230
Opencart 2.1 нету способа выбора доставки

Opencart 2.1 нету способа выбора доставки

Нужно добавить способы доставки в интернет магазине https://kalibritop/ при оформлении заказа

189
Достать часть строки из ссылки и вставить в часть другой ссылки

Достать часть строки из ссылки и вставить в часть другой ссылки

есть задача доставать выделенную жирным часть строки https://wwwyoutube

239