我按照本教程安装了带有FOSUserBundle的SonataAdmin.
现在我不断收到此错误消息:没有为Application\Sonata\UserBundle\Entity\User类定义实体管理器
但是我如何设置/传递EntityManager?我没有找到任何关于配置它或任何关于此错误意味着什么的提示.有人帮忙吗?
编辑#1:
正如所要求的那样,到目前为止,这是我在config.yml中为sonata所拥有的内容:
sonata_block:
default_contexts: [cms]
blocks:
sonata.admin.block.admin_list:
contexts: [admin]
sonata.block.service.text:
sonata.block.service.rss:
Run Code Online (Sandbox Code Playgroud)
编辑#2:
我为Doctrine2 ORM Admin添加了实体管理器配置部分,在文档中提到如果保留为null,则应该使用默认值.不过,它并没有解决我的问题.
sonata_doctrine_orm_admin:
# default value is null, so doctrine uses the value defined in the configuration
entity_manager: '@doctrine.orm.entity_manager'
Run Code Online (Sandbox Code Playgroud)
编辑#3: 我确实将auto_mapping设置为true,即使你默认也是如此.仍然没有解决这个问题.
我在bootstrap文档中创建了一个Form builder.php来构建我的登录表单和我的注册表单,如下所示:http: //bootstrap.braincrafted.com/base-css#forms但接下来我发现了FOSUserBundle,我认为它可能是使用它是一个好主意.问题是:我不能简单地重用之前创建的表单.
我想使用bootstrap来自定义FOSUser模板.特别是对于提交按钮,我想添加所有这些:class ="btn primary large"
我创建了一个覆盖FOSUserBundle的UserBundle.
我在FOSUserBundle中自定义了login.html.twig,将login.html.twig放在UserBundle/Ressources/Views/Security/login.html.twig中
这很简单,因为登录模板只有一个文件.
但是我如何才能为注册部分做这件事呢?
有两个文件:register.html.twig和register_content.html.twig
所以我在UserBundle中创建了一个Registration文件夹,然后我输入了这两个文件.
但是,我用什么来改变提交按钮的样式?
在register.html.twig我让:
{% extends "UserBundle::layout.html.twig" %}
{% block fos_user_content %}
{% include "UserBundle:Registration:register_content.html.twig" %}
{% endblock fos_user_content %}
Run Code Online (Sandbox Code Playgroud)
在register_content.html.twig中:
<form action="{{ path('fos_user_registration_register') }}" {{ form_enctype(form) }} method="POST" class="fos_user_registration_register">
{{ form_widget(form) }}
<div>
<input class="btn primary large" type="submit" value="{{ 'registration.submit'|trans({}, 'FOSUserBundle') }}" />
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
您是否认为使用该捆绑包是一个很好的解决方案? https://github.com/CCETC/FOSUserBundle
它直接将所有表单与bootstrap样式集成在一起.
但是如果有一天我想在注册表格中添加一个字段(例如性别),我可以在这个包中做,就像使用原始的FOSUserBundle一样吗?
知道我想以寄存器形式添加一些自定义字段,并使用bootstrap自定义表单,我想知道使用FOSUserBundle是不是一个好主意,或者如果最好建立一个我自己的全新包来管理我的用户网站.
我在设置安全性时遇到了一些麻烦。
我希望匿名和登录成员都可以访问一个页面。我希望它根据情况显示不同的内容(实际上,我希望在继续时仍以会员身份登录)。
我想要公开访问的页面是 ^/profile。
我这样设置我的 security.yml :
jms_security_extra:
secure_all_services: false
expressions: true
security:
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:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
# Firewall pour les pages de connexion, inscription, et récupération de mot de passe
login:
pattern: ^/(login$|register|resetting) # Les adresses de ces pages sont login, register et resetting
anonymous: true # On autorise bien évidemment les anonymes sur ces pages # Firewall principal pour le …
Run Code Online (Sandbox Code Playgroud) 我正在使用FOSUserBundle.这两者有什么区别?
$this->get('fos_user.user_manager');
Run Code Online (Sandbox Code Playgroud)
...和...
$this->getUser();
Run Code Online (Sandbox Code Playgroud)
我发现我在不同的时间使用了上述两种方法,一切正常.
我猜第一个是来自FOS,第二个是默认的,但我猜我应该总是使用同一个.
这是我用过的一段代码:
$user = $this->getUser();
if($user) {
$email = $user->getEmail();
} else {
$email = "no email";
}
Run Code Online (Sandbox Code Playgroud)
..另一个......
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->findUserBy(array('memberID' => '123'));
Run Code Online (Sandbox Code Playgroud)
...所以我应该为两者使用相同的方法吗?
我有一个标准 FOS 用户,该用户与博客实体具有多对一实体关系。
/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="blog")
* @ORM\JoinColumn(name="user", referencedColumnName="id")
*/
private $user;
Run Code Online (Sandbox Code Playgroud)
我使用了app/consolegenerate:doctrine:crud命令来生成基本的 crud 系统。
当我创建新的博客实体时,我想插入执行该操作的登录用户。默认情况下,Symfony 生成 CRUD 代码,允许用户选择连接到实体的用户。
$builder
->add('name')
->add('address')
->add('facebook')
->add('twitter')
->add('user')
;
Run Code Online (Sandbox Code Playgroud)
在控制器中,我可以使用 security.context 访问登录用户:
$user = $this->get('security.context')->getToken()->getUser();
Run Code Online (Sandbox Code Playgroud)
改变这种情况的最佳行动方案是什么?
我喜欢大多数人试图覆盖FOSUserBundle角色,因此我可以将ManyToMany映射到角色实体.
不幸的是由于某些原因,由于模型/用户的映射,我得到以下内容:
Property "roles" in "Acme\DemoBundle\Entity\User" was already declared, but it must be declared only once
Run Code Online (Sandbox Code Playgroud)
在FOSUserBundle中发布的这个git问题中似乎提到了一些解决方法:
https://github.com/FriendsOfSymfony/FOSUserBundle/pull/1081#issuecomment-19027818
我是Doctrine ORM并使用Annotations映射而不是yml或xml.最新的Symfony(2.4)和最新的FOSUB.
我通过将所有内容复制到我的实体而不是扩展来尝试替代选项,但说实话,这搞砸了所有内容.
我试图创建我自己的模型/用户扩展FOSUserBundle/Model/User没有映射的想法.然后从中扩展我的实体/用户.我试过但我仍然遇到同样的问题.我假设我做错了.
有人可以建议/展示我将如何正确地做到这一点?
我真的需要能够覆盖角色,因为尽管FOSUserBundle很棒,角色的适应性也不是很好.虽然我当时很欣赏这是他们能够做到这一点的唯一方法,现在改变它现在打破BC.
希望有人能提供帮助.
亲切的问候Paul Pounder
我正在使用Symfony 3.3.9,当我尝试渲染表单时,我有以下错误:
在呈现模板期间抛出了异常("无法呈现表单,因为块名称数组包含重复项:"_ fos_user_registration_form_errors","user_errors","user_errors","fos_user_registration_errors","form_errors".").
预先感谢您的帮助 !
编辑17/09/2017 你去:
public function indexAction()
{
/** @var $formFactory FactoryInterface */
$formFactory = $this->get('fos_user.registration.form.factory');
$form = $formFactory->createForm();
return $this->render('AppTMMainBundle:Default:index.html.twig', array(
'form' => $form->createView(),
));
}
Run Code Online (Sandbox Code Playgroud)
我的树枝:
{{ form_start(form, {'method': 'post', 'action': path('fos_user_registration_register')}) }}
<div class="card-content">
<h3 class="text-center title" style="color: #3C4858;margin:10px 0;">Inscription</h3>
<div class="social text-center">
<a class="btn btn-just-icon btn-round btn-facebook" href="{{ path('hwi_oauth_service_redirect',{'service': 'facebook'}) }}">
<i class="fa fa-facebook"> </i>
</a>
<a class="btn btn-just-icon btn-round btn-twitter" href="{{ path('hwi_oauth_service_redirect',{'service': 'twitter'}) }}">
<i class="fa fa-twitter"></i>
</a>
<a class="btn btn-just-icon …
Run Code Online (Sandbox Code Playgroud) 我将我的 Symfony3 应用程序从共享主机移到了我刚刚设置的新 VPS。当我尝试登录应用程序(使用随意的 FOSUserBundle 表单)时,Symfony 确实登录我只是为了在下一页重新加载时断开我的连接。这是“立即”,因为成功登录所做的第一件事就是重定向到一个页面。
我试过的:
我正在使用 Symfony 3.4.6 和 FOSUB 2.0.0。任何的想法?
更新:Security.yml
# https://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
providers:
fos_userbundle:
id: fos_user.user_provider.username_email
firewalls:
main:
pattern: ^/
form_login:
provider: fos_userbundle
check_path: fos_user_security_check
failure_path: fos_user_security_login
login_path: /fr/public/login
default_target_path: app_homepage
logout:
path: fos_user_security_logout
target: fos_user_security_login
anonymous: true
access_control:
# Allow anonymous …
Run Code Online (Sandbox Code Playgroud) 我正在关注这个:https : //symfony.com/doc/current/bundles/FOSUserBundle/overriding_templates.html
我在里面找到了默认模板 vendor/friendsofsymfony/user-bunfle/views/layout.html.twig
然后文档说将您的新布局模板放置在app/Resources/FOSUserBundle/views/layout.html.twig
. 事情是,在 Symfony4 中,我认为没有更多的应用程序文件夹。那我该怎么做呢?谢谢
我正在使用FOSUserBundle,我想在注册表单中添加一些HTML元素.实际上,我做了,我可以在表单中看到User类的添加属性.问题是我想要那些字段(名字,姓氏,出生日期等)来获得我的CSS模板(bootstrap)的外观和感觉.我通过覆盖它成功地为登录页面执行了此操作,因为HTML是显式声明的.我想对注册页面做同样的事情,但它似乎对我很困惑,因为这里的内容是:
register.html.twig
{%extends"FOSUserBundle :: layout.html.twig"%}
{%block fos_user_content%} {%include"FOSUserBundle:Registration:register_content.html.twig"%} {%endblock fos_user_content%}
register_content.html.twig
{%trans_default_domain'FOSUserBundle'%}
{{form_widget(form)}}如何从此代码访问我在页面中看到的元素?
fosuserbundle ×10
symfony ×9
php ×3
doctrine-orm ×2
twig ×2
sonata-admin ×1
symfony-2.4 ×1
symfony-3.3 ×1
symfony-3.4 ×1
symfony4 ×1