问题标签 [symfony-4.3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
symfony - Symfony 4.3 中的 FOSUserBundle 注册表单
我正在尝试按照以下文档为 Symfony 4.3 设置我的 FOSUserBundle 2.0:https ://symfony.com/doc/2.1/bundles/FOSUserBundle/index.html
我创建了一个扩展 FOSUser 的新成员类,就像在文档中一样:
我在 fos_user.yaml 中配置 user_class:
我使用fos_user.registration.form.factory但我的注册表总是得到相同的字段,无论我做什么:
任何帮助表示赞赏。先感谢您。
doctrine-orm - php bin/console make:entity --regenerate App 不生成新字段
我更新了这个实体,添加了一些字段。
现在我想重新生成getter和setter,但是执行时php bin/console make:entity --regenerate App
没有结果;我的实体是listet,但它说“没有变化”。我尝试过使用 --overwrite 选项的事件。
我正在使用 symfony 4.3.8 在以前的版本中,我执行了 'php bin/console dictionary:genetrate:entities App',我不确定我是否可以在 symfony 4 中使用这个命令,无论如何它都不起作用.
我不知道还能尝试什么...
symfony - 使用映射的 false 和多个 true 验证 symfony 4 formfield 文件类型
我有一个关于滑雪板技巧的项目。在我的项目中,我得到了一个实体 Trick,它有一个属性“插图”,它是另一个实体的集合:插图。我正在尝试制作一个表单 TrickType,其中用户可以一次加载许多插图(图像:png、jpeg、jpg、gif)。然后控制器保存文件,并使用文件的名称和路径作为“url”属性创建了几个插图实体。
所以,TrickType 不能直接管理插图实体,因为我必须在我的表单中使用 FileType 字段,这样可以加载文件,并且文件类型当然不会直接创建实体。这就是为什么我的技巧类型表单中的文件类型字段必须具有以下选项的原因:
- 多个:true(一次加载多个文件)
- mapped : false (Trick 中没有关于 url 的字段,只是插图实体的集合)
我的实体、表单和控制器都已正确完成:如果我不对文件进行任何验证,或者如果我进行了验证,但仅在一个文件上进行,则一切正常。但我必须确保每个文件都是真正的图像。
这是我试图这样做的:
1 - 直接在 TrickType 中的约束:
问题:约束尝试检查该字段,该字段是集合而不是文件。所以我得到了错误“这个值应该是字符串类型”
2 - 形式中没有约束,但在实体中
注意:此解决方案和以下解决方案不会阻止保存错误的文件,因为它只涉及实体,而不涉及文件。因此,即使它有效,它也只是防止从数据库中的 url 找到错误的文件并将其放入网站,但无论如何它都不是一个很好的解决方案
在插图实体中:
在 Trick 实体中,尝试了 2 件事:
错误:“约束 Valid 不能嵌套在约束 Symfony\Component\Validator\Constraints\All 内”
第二次尝试技巧:
没有错误,但无论发生什么,表单都被认为是有效的(我可以添加任何类型的文件,symfony 不会阻止我)
3 - 我之前没有做任何事情,而是在 Trick 实体中回调
这就像我只使用 Valid (不在 All 约束内)的前一种情况一样,什么都不做。就像没有检查任何东西一样。
添加
在我的回调开始时给我一个结果:一个空的arraycollection。当然,我会发送一些文件。
所以,回调被执行,但没有插图。
这让我想知道当我尝试提交表单时是否直接执行回调(所以空插图是正常的:控制器创建它之前没有插图)
有关信息,这是我在控制器中处理表单提交的方法:
如果有人知道我要做什么?
谢谢 !
symfony - Symfony 4实体字段更改时,更改另一个实体中的字段
例如,我有两个实体:
house
如果Entity中的字段Dog
被更新(设置或删除),我需要抛出一个事件,然后在 Entity House 中添加或删除字段 dog。谁能告诉我如何做到这一点?
symfony - Symfony 在哪里存储登录用户的信息?
我已经用 symfony 4.3 开始了一个项目。注册和验证用户的代码是使用控制台生成的,使用bin/console make:auth
and bin/console make:registration-form
,除此之外我并没有真正修改它。
现在,我有一些页面仅限于某些用户角色。这是在 config/packages/security.yaml 中配置的,例如
我还有一个允许我修改用户角色的表单。现在这是问题的症结所在:如果我修改当前连接的用户的角色,他可以访问的页面在他注销并再次登录之前不会改变。由于数据库已正确更新,这意味着他以前的角色仍存储在某个地方。我需要知道在哪里,这样我就可以在不强制他注销并重新登录的情况下更新它。
我不认为它在一个普通文件中,因为find . -mmin 5
在我创建一个新用户并以他们身份登录后什么也找不到。我见过提到 var/cache//session,但我没有这个目录。我在数据库中也看不到任何内容,在我的浏览器上也看不到任何带有信息的 cookie。
那么,Symfony 在哪里存储登录用户的信息呢?
https://stackoverflow.com/a/57676864/11410707
这个解决了(部分)我的问题,但前提是我修改了当前用户,而不是修改另一个用户。我仍然对令牌的存储位置感兴趣。
即使两个链接都没有提供答案,问题也已被锁定,所以在这里记录一下:
登录用户的信息存储在每个用户的 PHP 会话中。反过来,PHP 会话作为纯文件存储在目录 /var/opt/remi/php73/lib/php/session/ 中(至少在我的 CentOS 安装中)。
每个会话只能由相应的用户访问,由 cookie PHPSESSID 标识。因此,无法直接刷新远程用户的会话。
localization - Symfony 4.3.5 - 加载不存在的公共语言环境
在 Symfony 4.3.5 中,当在 url (eq http://127.0.0.1:8000/en/example
) 中使用 locale 时,框架开始加载不存在的公共路由到资源;
/en/images/like-icon-58x25.png
相反images/like-icon-58x25.png
。
当服务器尝试访问以路由为前缀的公共路由时,我在这些资源中的每一个上都得到 404,仅加载纯 HTML:
[Wed Jan 29 19:17:30 2020] 127.0.0.1:50790 [404]: /en/css/bootstrap.css
[Wed Jan 29 19:17:30 2020] 127.0.0.1:50794 [404]: /en/css/style.css
[Wed Jan 29 19:17:30 2020] 127.0.0.1:50792 [404]: /en/css/fonts.css
[Wed Jan 29 19:17:30 2020] 127.0.0.1:50796 [404]: /en/images/logo-proizd-team-2019-web2.png
[Wed Jan 29 19:17:30 2020] 127.0.0.1:50798 [404]: /en/images/project-1-195x164.jpg
[Wed Jan 29 19:17:30 2020] 127.0.0.1:50800 [404]: /en/js/core.min.js
[Wed Jan 29 19:17:30 2020] 127.0.0.1:50802 [404]: /en/js/script.js
如何解决这个问题呢。找不到类似的问题和解决方案。
symfony - Symfony - 对 Envelope 的多环境支持
我在 symfony 4.3(我有多个环境(.env))中使用 enqueue-dev + messenger-enqueue-transport 和 beanstalk。
我应该如何设置它,以便来自不同环境的作业不会混合在同一个队列中?(因为 beanstalk 服务器是一样的)
我使用以下方法运行每个环境的作业:
当我在没有 Smyfony 的情况下使用 pheanstalk 时,我只是在作业名称上添加了一个后缀,但在 symfony 中,作业是使用类设置的:
(我的旧实现):
我试过了
config/packages/enqueue.yaml
::
config/packages/messenger.yaml
:
还有
config/packages/enqueue.yaml
::
config/packages/messenger.yaml
:
但是随后 messenger:consume 不会消耗任何消息。
php - SONATA MY ADMIN : TypeError: trim() 期望参数 1 是字符串,给定对象
我目前在一个网站上工作,我必须使用 Sonata Admin 作为后台。我正在将项目从 symfony 3 升级到 symfony 4,当我尝试过滤实例化实体时遇到问题。
我以这种方式配置了一个过滤器:
它在下拉列表中很好地引用了现有的 Universe 实体(像我问的那样显示它们的名称)。你自己看 :
但是,当我尝试使用该列表中的名称进行实际过滤时,我收到了该错误:
TypeError: trim() expects parameter 1 to be string, object given
我查看了互联网,从我在文档中找到的内容中,我完全按照他们的方式配置了过滤器(来源:https ://symfony.com/doc/current/bundles/SonataAdminBundle/getting_started/the_list_view.html#filtering-by-类别)。
你知道我做错了什么吗?我不知道要给出更多的东西才能找到错误...
非常感谢 !
编辑
我也不明白的是,如果我要过滤的属性是外键,它就像一个魅力。例如,这里的 jobid 是 Job 实体的外键,而我们在另一个实体下。
考虑到这一点,我不明白为什么它不起作用。
第二次编辑
堆栈跟踪 :
最后编辑
以防万一那些将来会搜索类似内容的人。
我结束了这样的事情:
使用我自己的方法 fetchAllDistinctBy 创建我需要的选择列表。
php - 结合pagerfanta的搜索结果
我有一个显示项目列表的应用程序,在主页中我添加了带有两个输入的表单,第一个将包含月份值,第二个将包含年份值;我在控制器内部设置了该动作,其中有一个函数接受两个参数“月,年”。
当我提交搜索表单时,结果正按预期显示,页面分页也在那里,但是当我单击下一页例如页面'2'时发生这种情况,因为它$getArgs
是空的有没有办法保持更改页面时使用相同的参数。
谢谢 :)
symfony - PHP bin/控制台原则:数据库:创建
使用 PHP 7.1.33,我正在为我的项目创建一个新数据库,这个问题出现在我身上
php bin/console 学说:数据库:创建
在 AbstractPostgreSQLDriver.php 第 79 行:
驱动程序发生异常:找不到驱动程序在 PDOConnection.php 第 31 行:
找不到驱动程序在 PDOConnection.php 第 27 行:
找不到驱动程序学说:数据库:创建 [-s|--shard SHARD] [-c|--connection [CONNECTION]] [--if-not-exists] [-h|--help] [-q|--quiet] [-v|vv|vvv|--verbose] [-V|--version] [--ansi] [--no-ansi] [-n|--no-interaction] [-e|--env ENV ] [--无调试] [--]