我已按照FOSUserBundle 的安装指南操作,并在步骤8中收到以下错误:
[Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException]
ServiceNotFoundException:服务"security.authentication.manager"依赖于不存在的服务"security.user.provider.concrete.fos_userbundle".
这是我的security.yml:
# app/config/security.yml
security:
providers:
fos_userbundle:
id: fos_user.user_manager
encoders:
Symfony\Component\Security\Core\User\User: plaintext
FOS\UserBundle\Model\UserInterface: sha512
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
users:
user: { password: userpass, roles: [ 'ROLE_USER' ] }
admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
login:
pattern: ^/demo/secured/login$
security: false
secured_area:
pattern: ^/demo/secured/
form_login:
check_path: /demo/secured/login_check
login_path: /demo/secured/login
logout:
path: /demo/secured/logout
target: /demo/
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
logout: …
Run Code Online (Sandbox Code Playgroud) 我发现这个片段确实在创建时在我的表单中放置了一个默认值
$builder
->add('myfield', 'text', array(
'label' => 'Field',
'data' => 'Default value'))
;
Run Code Online (Sandbox Code Playgroud)
如果我想用FOSUser捆绑中的身份验证人员替换"默认值"该怎么办?(返回true为is_granted("IS_AUTHENTICATED_REMEMBERED"))
我可以用twig文件检索该名称
{{ app.user.username }}
Run Code Online (Sandbox Code Playgroud)
我也用控制器方法完成了它
$username=$this->container->get('security.context')->getToken()->getUser()->getUsername()
Run Code Online (Sandbox Code Playgroud)
但我无法设法使我的形式工作!
我不确定我是否理解那个容器的东西......既不是如何在类和控制器之间传递变量......这可能是什么?
->add('myfield', 'text', array(
'label' => 'Field',
'data' => FOS\UserBundle\Model::$this->getUsername()))
Run Code Online (Sandbox Code Playgroud) 我已经安装了SonataAdminBundle,SonataUserBundle,FOSUserBundle和我自己的软件包,它扩展了FOSUserBundle.
mysite/admin/dashboard看起来不错,但是当我尝试获取用户列表(mysite/admin/sonata/user/user/list)时,我收到此错误:
类Application\Sonata\UserBundle\Entity\User不存在
为什么?我该怎么办?
UPD:
好的,现在我发现了这个问题,但现在又有了另一个问题.
找不到"GET/admin/sonata/user/user/list"的路由
为什么这种溃败不存在?应该放置这些路线的位置以及为什么在基本的SonataUserBundle安装中没有这些路线?
当我使用标准逻辑时,它工作,注册没有任何问题.
<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="fos_user_registration_register">
{{ form_widget(form) }}
<div>
<input type="submit" value="{{ 'registration.submit'|trans({}, 'FOSUserBundle') }}" />
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
但是,当我手动覆盖字段时,它看起来像是注册,但是,它没有注册,抛出错误是CSRF令牌无效.我是否必须添加其他任何内容才能使此代码生效?
<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="fos_user_registration_register">
{{ form_widget(form.username) }}
{{ form_widget(form.email) }}
{{ form_widget(form.plainPassword.first) }}
{{ form_widget(form.plainPassword.second) }}
{{ form_widget(form.name) }}
{{ form_widget(form.Position) }}
{{ form_widget(form.Country) }}
{{ form_widget(form.notification) }}
<div>
<input type="submit" value="{{ 'registration.submit'|trans({}, 'FOSUserBundle') }}" />
</div>
</form>
Run Code Online (Sandbox Code Playgroud) Commuity,
我使用FosUserBundle,我的用户名有问题.
在我的页面上,您只需要一封电子邮件和一个密码.=>你可以使用用户名!(因为那样,我无法使用setUsername($ email)^^覆盖实体中的setEmail()函数
如果我在我的配置中使用它,我会收到以下错误.
fos_user:
registration:
form:
validation_groups: [AppRegistration]
Run Code Online (Sandbox Code Playgroud)
错误:
SQLSTATE[23000]: Integrity constraint violation: 1048 Column 'username' cannot be null
Run Code Online (Sandbox Code Playgroud)
我能做什么?
先感谢您!
我正在使用FOSuserBundle,我已经覆盖了注册和登录表单,并且它们工作正常但是覆盖更改密码表单不起作用.它仍然从vendor\friendsofsymfony\user-bundle\FOS\UserBundle\Form\Type\ChangePasswordFormType中的原始类中读取
ChangePasswordFormType.php
<?php
namespace Boutique\UserBundle\Form\Type;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Security\Core\Validator\Constraint\UserPassword as OldUserPassword;
use Symfony\Component\Security\Core\Validator\Constraints\UserPassword;
use FOS\UserBundle\Form\Type\ChangePasswordFormType as BaseType;
class ChangePasswordFormType extends BaseType
{
private $class;
/**
* @param string $class The User class name
*/
public function __construct($class)
{
$this->class = $class;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
if (class_exists('Symfony\Component\Security\Core\Validator\Constraints\UserPassword')) {
$constraint = new UserPassword();
} else {
// Symfony 2.1 support with the old constraint class
$constraint = new OldUserPassword();
}
$builder->add('current_password', …
Run Code Online (Sandbox Code Playgroud) 我知道这个主题已经开放,但几个月之后,根本没有答案,当我尝试回答知道这位作者是否有任何解决方案时......我的评论被删除了.所以我想再次发布这个问题.
我正在使用我的管理SonataAdminBunbdle和SonataUserBundle.除了一些特定的东西,一切都工作得很好.
现在,我的问题.我想覆盖默认的登录表单.但是,即使我尝试的一切,也没有任何作用.
1)我试图覆盖FOSUserBundle登录表单,如官方文档中所述.
我把这个文件放在正确的路径上
{% extends "FOSUserBundle::layout.html.twig" %}
{% block fos_user_content %}
AZERTY
{% endblock fos_user_content %}
Run Code Online (Sandbox Code Playgroud)
完全删除了原始登录表单,但没有任何更改,我仍然拥有相同的默认登录表单.
2)对SonataAdminBundle使用相同的方法,但是对于登录表单模板没什么用.
3)然后再一次为SonataUserBundle,但我没有找到任何覆盖登录表单模板.
我没有解决方案,这就是我要求帮助的原因.我找到了如何通过直接修改我的供应商文件来更改登录表单:
// vendor/sonata-project/user-bundle/Resources/views/Admin/Security/login.html.twig
{% extends base_template %}
{% block content %}
<div class="connection">
<form action="{{ path("sonata_user_admin_security_check") }}" method="post">
{% if error %}
<div class="alert alert-error">{{ error|trans({}, 'SonataUserBundle') }}</div>
{% endif %}
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
<div class="control-group">
<label for="username">{{ 'security.login.username'|trans({}, 'FOSUserBundle') }}</label>
<div class="controls">
<input type="text" id="username" name="_username" value="{{ last_username …
Run Code Online (Sandbox Code Playgroud) symfony fosuserbundle sonata-admin sonata-user-bundle sonata
当我尝试使用错误的凭据登录时,它会显示"再次尝试,错误的凭据",但在输入正确的凭据后,它会显示错误找不到"GET /"的路由(来自" http:// localhost/bdayProj/web/app_dev. php/login ").以下是我的security.yml的配置
security:
encoders:
FOS\UserBundle\Model\UserInterface: bcrypt
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: ROLE_ADMIN
# http://symfony.com/doc/current/book/security.html#where-do-users-come-from-user-providers
providers:
in_memory:
memory: ~
fos_userbundle:
id: fos_user.user_provider.username
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
logout: true
anonymous: true
# activate different ways to authenticate
# http_basic: ~
# http://symfony.com/doc/current/book/security.html#a-configuring-how-your-users-will-authenticate
# form_login: ~
# http://symfony.com/doc/current/cookbook/security/form_login_setup.html
access_control:
- { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } …
Run Code Online (Sandbox Code Playgroud) 我刚安装FOSUser捆绑包,并在运行时在AppKernel
的registereBundles()
函数中对其进行了初始化
console cache:clear
Run Code Online (Sandbox Code Playgroud)
它得到
[Symfony \ Component \ Config \ Definition \ Exception \ InvalidConfigurationException]必须配置路径“ fos_user”的子节点“ db_driver”。
我的理解是,除非或直到我不使用捆绑软件,否则它不应干扰应用程序流程。我不知道为什么到目前为止我对FOSUserBundle不做任何事情会得到这个问题
我想知道是否有一种方法可以使用FOSUserBundle的实体User初始化属性所有者,以便它包含创建Post的用户
我想在构造函数中执行此操作,如下所示.
namespace AppBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="post")
* @ORM\Entity(repositoryClass="AppBundle\Repository\PostRepository")
*/
class Post
{
/* here are defined some attributs */
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="posts")
* @ORM\JoinColumn(name="owner", referencedColumnName="id")
*/
private $owner;
public function __construct()
{
$this->owner = /* get current user */ ;
}
}
Run Code Online (Sandbox Code Playgroud)
有没有办法通过替换构造函数中的注释来做到这一点?
谢谢您的回答
fosuserbundle ×10
symfony ×10
php ×3
sonata-admin ×2
entity ×1
forms ×1
null ×1
orm ×1
sonata ×1
symfony-2.1 ×1