无法自定义注册FOSUserBundle

时间:2015-07-25 12:32:18

标签: php symfony bundle fosuserbundle

我尝试建立一个客户区域但是当我尝试自定义注册表单时遇到问题..

我有这个错误

You have requested a non-existent service "fos_user.registration.form".

我遵循了各种教程但是我的各种文件无法找到解决方案:

的src / Acme公司/ UserBundle /实体/ user.php的

    <?php
// src/Acme/UserBundle/Entity/User.php

namespace Acme\UserBundle\Entity;

use FOS\UserBundle\Model\User as BaseUser;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;

/**
 * @ORM\Entity
 * @ORM\Table(name="fos_user")
 */
class User extends BaseUser
{
    /**
     * @ORM\Id
     * @ORM\Column(type="integer")
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;

    /**
     * @ORM\Column(name="last_name",type="string", length=100)
     */
    public $lastname;

    /**
     * @ORM\Column(name="phone",type="string", length=12)
     */
    public $phone;

    /**
     * @ORM\Column(name="first_name",type="string", length=100)
     */
    public $firstname;

    /**
     * @ORM\Column(name="newsletter", type="boolean", options={"default":0})
     */
    public $newsletter;

    /**
     * @ORM\Column(name="cnil", type="boolean", options={"default":0})
     */
    public $cnil;

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

的src / Acme公司/ UserBundle /控制器/ RegistrationController.php

<?php

namespace Acme\UserBundle\Controller;

use Symfony\Component\HttpFoundation\RedirectResponse;
use FOS\UserBundle\Controller\RegistrationController as BaseController;
use Symfony\Component\HttpFoundation\Request;

class RegistrationController extends BaseController
{
    public function registerAction(Request $request)
    {
        $form = $this->container->get('fos_user.registration.form');
        $formHandler = $this->container->get('fos_user.registration.form.handler');
        $confirmationEnabled = $this->container->getParameter('fos_user.registration.confirmation.enabled');

        $process = $formHandler->process($confirmationEnabled);
        if ($process) {
            $user = $form->getData();

            /*****************************************************
             * Add new functionality (e.g. log the registration) *
             *****************************************************/
            $this->container->get('logger')->info(
                sprintf('New user registration: %s', $user)
            );

            if ($confirmationEnabled) {
                $this->container->get('session')->set('fos_user_send_confirmation_email/email', $user->getEmail());
                $route = 'fos_user_registration_check_email';
            } else {
                $this->authenticateUser($user);
                $route = 'fos_user_registration_confirmed';
            }

            $this->setFlash('fos_user_success', 'registration.flash.user_created');
            $url = $this->container->get('router')->generate($route);

            return new RedirectResponse($url);
        }

        return $this->container->get('templating')->renderResponse('FOSUserBundle:Registration:register.html.twig', array(
            'form' => $form->createView(),
        ));
    }
}

的src / Acme公司/ UserBundle /窗体/类型/ RegistrationFormType.php

<?php

namespace Acme\UserBundle\Form\Type;

use Symfony\Component\Form\FormBuilderInterface;
use FOS\UserBundle\Form\Type\RegistrationFormType as BaseType;


class RegistrationFormType extends BaseType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        parent::buildForm($builder, $options);

        // add your custom field
       $builder
        ->add('username', 'text', array('label' => 'form.username', 'attr' => array('class' => 'form-control'), 'label_attr'=> array('class' => 'col-sm-2 control-label')))
        ->add('lastname', 'text', array('label' => 'form.lastname', 'attr' => array('class' => 'form-control'), 'label_attr'=> array('class' => 'col-sm-2 control-label')))
        ->add('firstname','text', array('label' => 'form.firstname', 'attr' => array('class' => 'form-control'), 'label_attr'=> array('class' => 'col-sm-2 control-label')))
        ->add('phone','text', array('label' => 'form.phone', 'attr' => array('class' => 'form-control'), 'label_attr'=> array('class' => 'col-sm-2 control-label')))
        ->add('email','email', array('label' => 'form.email', 'attr' => array('class' => 'form-control'), 'label_attr'=> array('class' => 'col-sm-2 control-label')))
        ->add('plainPassword', 'repeated', array(
            'type' => 'password',
            'first_options' => array('label' => 'form.password', 'attr' => array('class' => 'form-control'), 'label_attr'=> array('class' => 'col-sm-2 control-label')),
            'second_options' => array('label' => 'form.password_confirmation', 'attr' => array('class' => 'form-control'), 'label_attr'=> array('class' => 'col-sm-2 control-label')),
            'invalid_message' => 'fos_user.password.mismatch',
        ))
        ->add('cnil', 'checkbox', array('label' => 'form.cnil'))
        ->add('newsletter', 'checkbox', array('label' => 'form.newsletter', 'required' => false));
    }

    public function getParent()
    {
        return 'fos_user_registration';
    }

    public function getName()
    {
        return 'acme_user_registration';
    }
}

的src / Acme公司/ UserBundle /资源/视图/注册/ register.html.twig

{% extends "AcmeUserBundle::layout_base.html.twig" %}

{% trans_default_domain 'AcmeUserBundle' %}

{% block fos_user_content %}
<div class="row">
    <div class="col-sm-12">

        <div class="panel panel-default">
            <div class="panel-heading">
                <h3 class="panel-title">Créer mon compte fidélité</h3>
            </div>
            <div class="panel-body">

                <form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="form-horizontal" role="form">
                    {{ form_widget(form._token) }}

                    <div class="form-group">
                        {{ form_label(form.lastname) }}
                        <div class="col-sm-10">
                            {{ form_widget(form.lastname) }}
                        </div>
                    </div>

                    <div class="form-group">
                        {{ form_label(form.firstname) }}
                        <div class="col-sm-10">
                            {{ form_widget(form.firstname) }}
                        </div>
                    </div>

                    <div class="form-group">
                        {{ form_label(form.phone) }}
                        <div class="col-sm-10">
                            {{ form_widget(form.phone) }}
                        </div>
                    </div>

                    <div class="form-group">
                        {{ form_label(form.email) }}
                        <div class="col-sm-10">
                            {{ form_widget(form.email) }}
                        </div>
                    </div>

                    <div class="form-group-separator"></div>

                    <div class="form-group">
                        {{ form_label(form.username) }}
                        <div class="col-sm-10">
                            {{ form_widget(form.username) }}
                        </div>
                    </div>

                    <div class="form-group">
                        {{ form_label(form.plainPassword.first) }}
                        <div class="col-sm-10">
                            {{ form_widget(form.plainPassword.first) }}
                        </div>
                    </div>

                    <div class="form-group">
                        {{ form_label(form.plainPassword.second) }}
                        <div class="col-sm-10">
                            {{ form_widget(form.plainPassword.second) }}
                        </div>
                    </div>

                    <div class="form-group">
                        <label class="col-sm-2 control-label"></label>
                        <div class="col-sm-10">
                            <div class="checkbox">
                                <label for="fos_user_registration_form_cnil">
                                    {{ form_widget(form.cnil) }}
                                    {{ 'form.cnil'|trans }}
                                </label>
                            </div>
                            <div class="checkbox">
                                <label for="fos_user_registration_form_newsletter">
                                    {{ form_widget(form.newsletter) }}
                                    {{ 'form.newsletter'|trans }}
                                </label>
                            </div>
                        </div>
                    </div>

                    <div class="form-group-separator"></div>

                    <div class="vertical-top">
                        <button type="submit" class="btn btn-info pull-right">{{ 'registration.submit'|trans }}</button>
                        <a href="{{ path('fos_user_security_login') }}" class="btn btn-gray">J'ai déjà un compte</a>
                    </div>
                </form>
            </div>
        </div>
    </div>
</div>
{% endblock fos_user_content %}

{% block javascript_import_on_this_page_first %}
    <link rel="stylesheet" href="{{ asset('js/select2/select2.css') }}">
    <link rel="stylesheet" href="{{ asset('js/select2/select2-bootstrap.css') }}">
    <link rel="stylesheet" href="{{ asset('js/multiselect/css/multi-select.css') }}">
{% endblock javascript_import_on_this_page_first %}

{% block javascript_import_on_this_page_end %}
    <script src="{{ asset('js/datepicker/bootstrap-datepicker.js') }}"></script>
    <script src="{{ asset('js/select2/select2.min.js') }}"></script>
    <script src="{{ asset('js/multiselect/js/jquery.multi-select.js') }}"></script>
{% endblock javascript_import_on_this_page_end %}

的src / Acme公司/ UserBundle /资源/配置/ services.xml中

<?xml version="1.0" encoding="UTF-8" ?>

<container xmlns="http://symfony.com/schema/dic/services"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>

        <service id="acme_user.registration.form.type" class="Acme\UserBundle\Form\Type\RegistrationFormType">
            <tag name="form.type" alias="acme_user_registration" />
        </service>

    </services>

</container>

应用程序/配置/ config.yml

imports:
    - { resource: parameters.yml }
    - { resource: security.yml }



framework:
    #esi:             ~
    translator:      { fallback: %locale% }
    secret:          %secret%
    router:
        resource: "%kernel.root_dir%/config/routing.yml"
        strict_requirements: ~
    form:            ~
    csrf_protection: ~
    validation:      { enable_annotations: true }
    templating:
        engines: ['twig']
        #assets_version: SomeVersionScheme
    default_locale:  "%locale%"
    trusted_proxies: ~
    session:         ~
    fragments:       ~

# Twig Configuration
twig:
    cache:            false
    debug:            %kernel.debug%
    strict_variables: %kernel.debug%

# Assetic Configuration
assetic:
    debug:          %kernel.debug%
    use_controller: false
    bundles:        [ ]
    #java: /usr/bin/java
    filters:
        cssrewrite: ~
        #closure:
        #    jar: %kernel.root_dir%/Resources/java/compiler.jar
        #yui_css:
        #    jar: %kernel.root_dir%/Resources/java/yuicompressor-2.4.7.jar

# Doctrine Configuration
doctrine:
    dbal:
        driver:   %database_driver%
        host:     %database_host%
        port:     %database_port%
        dbname:   %database_name%
        user:     %database_user%
        password: %database_password%
        charset:  UTF8
        # if using pdo_sqlite as your database driver, add the path in parameters.yml
        # e.g. database_path: %kernel.root_dir%/data/data.db3
        # path:     %database_path%

    orm:
        auto_generate_proxy_classes: %kernel.debug%
        auto_mapping: true

# Swiftmailer Configuration
swiftmailer:
    transport: %mailer_transport%
    host:      %mailer_host%
    username:  %mailer_user%
    password:  %mailer_password%
    spool:     { type: memory }

fos_user:
    db_driver: orm
    firewall_name: main
    user_class: Acme\UserBundle\Entity\User
    group:
        group_class: Acme\UserBundle\Entity\Group
    registration:
        confirmation:
            enabled:    true
            from_email:
                address:        noreply@adrien-design.net
                sender_name:    Adrien Design
        form:
            type: acme_user_registration

提前感谢您的帮助

1 个答案:

答案 0 :(得分:0)

根据this issue,在查看原始RegistrationController的代码后,我可以确认没有这样的服务,你应该这样做:

$formFactory = $this->get('fos_user.registration.form.factory');
$form = $formFactory->createForm();
相关问题