我有我的UserBundle扩展了FOSUserBundle并且工作正常.但现在,我想创建具有différents属性的多个用户实体.但问题是当我创建我的用户实体时,他扩展了我的主要用户实体,如下所示:
class User extends BaseUser
{
protected $id;
// The main user class who extends FOSUser entity
}
class UserB extends User
{
//
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时,我有一个错误:`
必须保护MyApp\UserBundle\Entity\UserB :: $ id的访问级别(如MyApp\UserBundle\Entity\User类).
当我在UserB实体中创建受保护的ID时,我有:
PHP致命错误:无法重新声明MyApp\UserBundle\Entity\UserB :: $ id.
并且,为了完成,我无法删除我的用户实体中的id少返回一个Doctrine错误:
[Doctrine\ORM\Mapping\MappingException]
没有为实体'MTS\UserBundle\Entity\User'指定标识符/主键.每个实体必须具有标识符/主键.
有人可以帮帮我吗?
编辑:问题解决了.我的代码:
/**
* MTS\UserBundle\Entity\User
*
* @ORM\Entity
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="string")
* @ORM\DiscriminatorMap({"userfb" = "UserFB"})
*/
abstract class User extends BaseUser
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* …Run Code Online (Sandbox Code Playgroud) 我使用Symfony2开发了一个Web应用程序.我使用FOSUserBundle进行用户管理和安全性.
现在我正在考虑为我的网络开发原生iOS APP,并且不知道如何解决从APP创建会话的问题,并在整个交互用户APP中对其进行管理.
换句话说,我想确保当我这样做时NSURLRequest,会以某种方式发送会话令牌以允许服务器关联同一会话中的所有请求.
在PHP端创建会话时有什么特别的事吗?处理来自iOS APP的请求时有什么特别的事吗?
你能否提一些好文章来学习如何实现这种方法?我想从开始做好.
提前致谢
我正在Symfony 2.1用于一个项目.我用它FOSUser Bundle来管理用户并为我的应用程序定制它.现在我想SonataAdmin Bundle用于管理用法.它工作正常进行正常的实体(我可以做平常的事情CRUD),但对于用户来说,我得到在仪表盘上的用户列表和链接,但是当我遵循创建新的,或单击编辑,我得到一个500服务器错误说法
"Class does not exist"
Run Code Online (Sandbox Code Playgroud)
我不想使用,SonataUser Bundle因为我在userBundle上进行了大量的自定义操作,我不想放松它们.
任何想法?任何一个例子?谢谢你的帮助:)
相关代码:
在config.yml中:
services:
sonata.admin.user:
class: Acme\AdminBundle\Admin\UserAdmin
arguments: [null, Acme\GeneralModelBundle\Entity\User, SonataAdminBundle:CRUD]
calls:
- [setUserManager, ["@fos_user.user_manager"]]
tags:
- {name: sonata.admin , manager_type: orm, group: Users, label: User}
Run Code Online (Sandbox Code Playgroud) symfony fosuserbundle symfony-2.1 sonata-admin sonata-user-bundle
我之前询问过为FOSUserBundle使用多个实体管理器,事实证明FOSUserBundle已经(部分)支持了它.所有我需要做的是指定连接/经理,我想在使用model_manager_name参数,如解释在这里
fos_user:
# ........
model_manager_name: account1
Run Code Online (Sandbox Code Playgroud)
示例app/config/config.yml
使用此FOSUserBundle将使用account1连接,并在该连接的数据库中使用用户信息.
doctrine:
dbal:
default_connection: default
connections:
account2:
dbname: account2
user: account2
password: password2
driver: pdo_mysql
host: localhost
port: ~
charset: UTF8
account1:
dbname: account1
user: account1
password: password1
driver: pdo_mysql
host: localhost
port: ~
charset: UTF8
default:
dbname: account
user: account
password: password
driver: pdo_mysql
host: localhost
port: ~
charset: UTF8
Run Code Online (Sandbox Code Playgroud)
我的应用程序要求当用户访问(例如)http://myapp.com/a/account1时,应用程序将使用account1连接,并且转到http://myapp.com/a/account2将使用account2的连接.对于我的应用程序的逻辑,这可以通过我的控制器轻松完成,因为我可以使用类似下面的内容;
$em = $this->get('doctrine')->getManager('account2');
$repository = $this->get('doctrine')->getRepository($class, …Run Code Online (Sandbox Code Playgroud) 基本上我想将json反序列化为用户对象.像这样
$serializer = $this->get('jms_serializer');
$data = $serializer->deserialize($this->get('request')->getContent(),
'My\FooBundle\Entity\User', 'json');
Run Code Online (Sandbox Code Playgroud)
请求数据传递给反序列化器:
{"id":2,"username":"...@gmail.com","username_canonical":"...@gmail.com", ... }
Run Code Online (Sandbox Code Playgroud)
抛出的错误:
request.CRITICAL:未捕获的PHP异常JMS\Serializer\Exception\RuntimeException:"您必须为FOS\UserBundle\Model\User :: $ username定义类型." 在...\vendor\jms\serializer\src\JMS\Serializer\GenericDeserializationVisitor.php第170行[] []
我用的是sf 2.3.是否有任何必须设置用于反序列化fos用户类?知道为什么我收到这条消息以及如何修复它?
我有以下身份验证处理程序:
class LoginAuthSuccessHandler implements AuthenticationSuccessHandlerInterface, AuthenticationFailureHandlerInterface
{
private $router;
private $container;
/**
* Constructor
* @param RouterInterface $router
*/
public function __construct(RouterInterface $router, $container)
{
$this->router = $router;
$this->container = $container;
}
public function onAuthenticationSuccess(Request $request, TokenInterface $token)
{
if ($request->isXmlHttpRequest()) {
$user = $this->container->get('security.context')->getToken()->getUser();
$result = array('success' => true, 'user' => $user);
return new Response(json_encode($result));
} else {
$route = $this->router->generate('ShopiousMainBundle_profile');
$referrer_url = $request->server->get('HTTP_REFERER');
if (strstr($referrer_url, '/items/')) {
$route = $referrer_url;
}
return new RedirectResponse($route);
}
}
public function …Run Code Online (Sandbox Code Playgroud) 我正在尝试为每个成功注册的用户提供一个ROLE_USER角色.我是FOSUserBundle的新手,所以从我在文档中看到的内容来看,它是通过将逻辑插入控制器来完成的.
这是我的NewUserGroupSet事件监听器:
<?php
namespace Tsk\TstBundle\EventListener;
use Doctrine\ODM\MongoDB\DocumentManager;
use FOS\UserBundle\Doctrine\UserManager;
use FOS\UserBundle\Event\FilterUserResponseEvent;
use FOS\UserBundle\FOSUserEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class NewUserGroupSet implements EventSubscriberInterface
{
protected $um;
protected $dm;
public function __construct(UserManager $um, DocumentManager $dm)
{
$this->um = $um;
$this->dm = $dm;
}
public static function getSubscribedEvents()
{
return array(
FOSUserEvents::REGISTRATION_COMPLETED => "onRegistrationSuccess",
);
}
public function onRegistrationSuccess(FilterUserResponseEvent $event)
{
$user = $event->getUser();
$user->setRoles(array('ROLE_USER'));
$this->um->updateUser($user);
$this->dm->flush();
}
}
?>
Run Code Online (Sandbox Code Playgroud)
并注册为服务如下:
parameters:
tsk_user.group_set.class: Tsk\TstBundle\EventListener\NewUserGroupSet
services:
tsk_user.group_set:
class: %tsk_user.group_set.class%
arguments: [@fos_user.user_manager, @doctrine.odm.mongodb.document_manager]
tags: …Run Code Online (Sandbox Code Playgroud) 我使用 Symfony 2.8.16 和 FOSUserBundle 1.3.7 fos 用户管理。在“应用程序/资源”中,我有一个“FOSUserBundle”文件夹,可以使用我的模板对 FOSUserBundle 模板进行附加费用。目前,我在 mywebsite.com/login 路线上有一个登录页面。
在我网站的其他公共页面上,我想在每个页面的顶部放置一个小的登录表单。
我怎样才能做到这一点?
在 app/Resources/config/routing.yml
index:
path: /index
defaults: { _controller: MyBundle:MyController:MyAction }
##################
# FOS User Bundle
##################
fos_user_security:
resource: "@FOSUserBundle/Resources/config/routing/security.xml"
Run Code Online (Sandbox Code Playgroud)
在 app/Resources/FOSUserBundle/views/security/login.html.twig
{% extends ": MyLayout.html.twig" %}
{% block fos_user_content %}
{% if error %}
<div class="alert alert-danger">{{ error|trans({}, 'FOSUserBundle') }}</div>
{% endif %}
<form action="{{ path("fos_user_security_check") }}" method="post">
<input type="hidden" name="_csrf_token" value="{{ csrf_token }}" />
<div class="row">
<div class="form-group col-m-6">
<input type="text" class="_username" id="_username" name="_username" value="{{ …Run Code Online (Sandbox Code Playgroud) 我想覆盖 FOSUserBundle 的 RegistrationType 的形式,但是在 registration_content.html.twig 模板中我得到了这个错误:
属性“firstname”和方法“firstname()”、“getfirstname()”/“isfirstname()”/“hasfirstname()”或“__call()”都不存在并且在类“Symfony\”中具有公共访问权限组件\表单\表单视图”。
这是我的RegistrationType表格:
class RegistrationType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('firstname');
}
public function getParent() {
return 'fos_user_registration';
}
public function getName() {
return 'app_user_registration';
}
}
Run Code Online (Sandbox Code Playgroud)
fos_user.yaml:
fos_user:
registration:
confirmation:
enabled: true
form:
name: app_user_registration
db_driver: orm
user_class: App\Entity\User
firewall_name: main
from_email:
address: foo@example.com
sender_name: bar@example.com
Run Code Online (Sandbox Code Playgroud)
用户实体:
class User extends BaseUser {
//
/**
* @ORM\Column(type="string", length=50, nullable=true)
*/
protected $firstname;
}
Run Code Online (Sandbox Code Playgroud)
registration_content.html.twig:
{{ form_start(form, {'method': 'post', 'action': …Run Code Online (Sandbox Code Playgroud) 我试图在安装FOSUser Bundle 2.0后更新doctrine架构,但我一直收到此错误:
In ArrayNode.php line 238:
The child node "db_driver" at path "fos_user" must be configured.
Run Code Online (Sandbox Code Playgroud)
文件config.yaml在位置/config/config.yaml中配置属性:
framework:
translator: ~
fos_user:
db_driver: orm
firewall_name: main
user_class: Entity\User
from_email:
address: "%mailer_user%"
sender_name: "%mailer_user%"
Run Code Online (Sandbox Code Playgroud)
我尝试通过官方教程解决它:http://symfony.com/doc/master/bundles/FOSUserBundle/index.html#prerequisites
我尝试先执行第5步,然后重新运行第1步.但仍然是同样的错误.
有任何想法吗?
fosuserbundle ×10
symfony ×10
php ×5
doctrine-orm ×1
events ×1
ios ×1
php-5.3 ×1
session ×1
sonata-admin ×1
symfony-2.1 ×1
symfony-2.3 ×1
symfony4 ×1
twig ×1