所以通常我可以通过执行以下操作来访问控制器中的用户管理器:
$this->get('fos_user.user_manager');
Run Code Online (Sandbox Code Playgroud)
但是我需要在服务中访问它.所以这就是我做的:
在我的config.yml文件中:
fos_user:
db_driver: orm
firewall_name: main
user_class: Main\UserBundle\Entity\User
services:
userbundle_service:
class: Main\UserBundle\Controller\UserBundleService
arguments: [@fos_user]
Run Code Online (Sandbox Code Playgroud)
在我的UserBundleService.php中:"
<?php
namespace Main\UserBundle\Controller;
use FOS\UserBundle\Entity\User;
use Symfony\Component\Security\Core\SecurityContextInterface;
use Symfony\Bridge\Monolog\Logger;
class UserBundleService
{
protected $securityContext;
public function __construct(User $user)
{
$this->user = $user;
}
public function validateRequest(){
$userManager = $this->container->get('fos_user.user_manager');
$this ->logger->warn("user is : ".$userManager);
exit;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
ServiceNotFoundException: The service "userbundle_service" has a dependency on a non-existent service "fos_user".
Run Code Online (Sandbox Code Playgroud)
所以我接下来要做的是将fos_user作为服务移到config.yml中:
services:
userbundle_service:
class: Main\UserBundle\Controller\UserBundleService
arguments: [@fos_user2]
fos_user2:
user_class: Main\UserBundle\Entity\User
Run Code Online (Sandbox Code Playgroud)
我收到错误:
RuntimeException: …Run Code Online (Sandbox Code Playgroud) 我在我的项目中实现了FOSUser.我成功地重载了表单.
只有当我想覆盖模板时,它才起作用.但我尊重FOSUser建筑的观点.
你知道什么是问题吗?
FOSUserbundle
我想在用户注册时记录User表上的createdAt,UpdateAt,loginAt等数据.
我在想的是我应该把它放在哪里.
我可以找到类似的参考
它说重写/src/Acme/UserBundle/Controller/RegistrationController.php
class RegistrationController extends BaseController
{
public function registerAction()
{
$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.'.$this->getEngine(), array(
'form' …Run Code Online (Sandbox Code Playgroud) 我正在将fileupload系统与fosuserbundle集成
我需要覆盖updateUser函数
/vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Doctrine/UserManager.php
Run Code Online (Sandbox Code Playgroud)
我把这个文件复制到了
/ACME/UserBundle/Doctrine/UserManager.php
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
这是我的临时/vendor/friendsofsymfony/user-bundle/FOS/UserBundle/Doctrine/UserManager.php
public function updateUser(UserInterface $user, $andFlush = true)
{
$this->updateCanonicalFields($user);
$this->updatePassword($user);
//it works but it should not be used here.
$user->upload();
//
$this->objectManager->persist($user);
if ($andFlush) {
$this->objectManager->flush();
}
}
Run Code Online (Sandbox Code Playgroud) 我正在使用FosUser重置密码系统,我不知道如何在用户更改密码后删除自动登录?
感谢您的帮助,我不想覆盖,我直接更改FOS文件.
这是我第一次独自使用Symfony2,我认为在配置FOS用户包时我犯了一个错误.看起来我的用户实体没有正确扩展FOS\UserBundle\Entity\User.
这是我的User类(与doc中提到的基本相同)
<?php
// src/Acme/UserBundle/Entity/User.php
namespace VillaPrivee\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use FOS\UserBundle\Entity\User as BaseUser;
/**
* @ORM\Entity
* @ORM\Table(name="user")
*/
class User extends BaseUser
{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
public function __construct()
{
parent::__construct();
// your own logic
}
}
Run Code Online (Sandbox Code Playgroud)
由于我使用Netbeans,我可以"按住Ctrl键"并确保"FOS\UserBundle\Entity\User"存在.到目前为止,我没有看到任何错误......
但是当我尝试使用终端创建新用户时,我收到此错误:
Fatal error: Call to undefined method VillaPrivee\UserBundle\Entity\User::setUsername()
in /Applications/MAMP/htdocs/VillaPrivee/vendor/friendsofsymfony/
user-bundle/FOS/UserBundle/Util/UserManipulator.php on line 50
Run Code Online (Sandbox Code Playgroud)
不知道我应该为你们提供哪些其他细节,请告诉我,在这种情况下是否有任何其他文件可能很重要.
谢谢你的帮助!
编辑:
<?php
namespace VillaPrivee\UserBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class VillaPriveeUserBundle extends Bundle
{
public function getParent()
{
return …Run Code Online (Sandbox Code Playgroud) 我已经定制了我的register_content.html.twig
<form class="form-horizontal" action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST">
<div id="fos_user_registration_form">
<div class="form-group">
<div class="col-sm-10">
{{ form_widget(form.username, { 'attr': {'class': 'form-control', 'placeholder': 'Pick a username' } }) }}
{{ form_errors(form.username) }}
</div>
</div> ...
Run Code Online (Sandbox Code Playgroud)
而现在,当我收到错误时,那些错误就像那样
fos_user.username.already_used
fos_user.email.already_used
fos_user.password.mismatch
Run Code Online (Sandbox Code Playgroud)
我只是想改变这些消息,任何人都可以帮助我吗?
我尝试使用FOSUserBundle,我按照文档中的说明覆盖了Bundle,但是当我尝试访问/ register时/ login工作(我没有覆盖它)时出现此错误:
Could not load type "app_user_registration"
500 Internal Server Error - InvalidArgumentException
Run Code Online (Sandbox Code Playgroud)
配置
Symfony版本:3.1.7
FOSUserBundle版本:dev-master
我的文件
应用程序/配置/ services.yml:
services:
app.form.registration:
class: CoreBundle\Form\Type\RegistrationFormType
tags:
- { name: form.type, alias: app_user_registration }
Run Code Online (Sandbox Code Playgroud)
应用程序/配置/ config.yml:
fos_user:
db_driver: orm
firewall_name: main
user_class: CoreBundle\Entity\User
registration:
form:
type: app_user_registration
Run Code Online (Sandbox Code Playgroud)
SRC/CoreBundle /表/类型/ RegistrationFormType.php
<?php
// src/CoreBundle/Form/Type/RegistrationFormType.php
namespace CoreBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class RegistrationFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name');
}
public function getParent()
{
return 'fos_user_registration';
} …Run Code Online (Sandbox Code Playgroud) 在Symfony中设置FOSUserBundle时,我遇到了一个奇怪的错误.我收到此错误消息:
A colon cannot be used in an unquoted mapping value at line 30 (near " csrf_token_generator: security.csrf.token_manager").
Run Code Online (Sandbox Code Playgroud)
这是我的security.yml,谁能告诉我我做错了什么?
# To get started with security, check out the documentation:
# https://symfony.com/doc/current/security.html
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
# https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
providers:
# in_memory:
# memory: ~
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
logout: true
anonymous: true
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: …Run Code Online (Sandbox Code Playgroud) 我被要求在CRM中添加确认电子邮件,然后用户将注册,然后发送一封电子邮件,其中包含确认的链接以启用其帐户.但是,无论何时单击链接,它都会立即重定向到登录页面,因为它们尚未确认,因此无用.我试图在security.yml文件中排除它,但到目前为止没有运气.
我试过了:
- { path: ^/register/*, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/confirm/, role: IS_AUTHENTICATED_ANONYMOUSLY }
- { path: ^/register/confirm/*, role: IS_AUTHENTICATED_ANONYMOUSLY }
Run Code Online (Sandbox Code Playgroud)
但这些似乎都不起作用.
根据要求,FOS注册的路由文件:
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/routing http://symfony.com/schema/routing/routing-1.0.xsd">
<route id="fos_user_registration_register" path="/" methods="GET POST">
<default key="_controller">FOSUserBundle:Registration:register</default>
</route>
<route id="fos_user_registration_check_email" path="/check-email" methods="GET">
<default key="_controller">FOSUserBundle:Registration:checkEmail</default>
</route>
<route id="fos_user_registration_confirm" path="/confirm/{token}" methods="GET">
<default key="_controller">FOSUserBundle:Registration:confirm</default>
</route>
<route id="fos_user_registration_confirmed" path="/confirmed" methods="GET">
<default key="_controller">FOSUserBundle:Registration:confirmed</default>
</route>
</routes>
Run Code Online (Sandbox Code Playgroud)
FOS用户配置:
fos_user:
db_driver: orm
firewall_name: main
user_class: AppBundle\Entity\User
registration:
confirmation:
enabled: true
template: emails/registration.html.twig …Run Code Online (Sandbox Code Playgroud) fosuserbundle ×10
symfony ×10
php ×2
extend ×1
forms ×1
overriding ×1
twig ×1
validation ×1
yaml ×1