问题标签 [symfony-components]
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.
php - 如何在 symfony2 中创建自定义事件
我想创建调用的自定义事件user_logged
,以便我可以将我的侦听器附加到这些事件。
每当用户登录时,我都想执行一些功能。
php - PHPUnit 模拟对象不起作用
我是在 PHPUnit 中模拟对象的新手,无法让它工作。我正在构建当前的扩展SensioGeneratorBundle
(用于 Symfony2)。我使用通过PEAR
. 它在PHP 5.3.5上运行(因为 PEAR 安装在该版本中)。
我的剥离课程是:
控制器生成器.php
生成控制器命令.php
生成控制器命令测试.php
当我运行 PHPUnit 时,我不断收到此错误:
为什么我会收到此错误?我想我generate
在方法中调用了命令GenerateControllerCommand::execute
?我做错了什么,可能是真的吗?或者这是 PHPunit 中的错误?
php - Symfony 类加载器组件示例
我试图建立一个简单的例子来了解 Symfony 的 ClassLoader 组件和新的PSR-0标准是如何工作的。
首先我创建了 Bar.php:
然后我创建了一个 autoloader.php(在供应商路径下我有 ClassLoader 组件):
最后我创建了 Foo.php:
但是当我执行时:
我收到以下错误消息:
PHP 警告:在第 4 行的 Foo.php 中,使用非复合名称“Acme”的 use 语句无效
PHP 致命错误:在第 7 行的 Foo.php 中找不到类 'Bar'
我在这里做错了什么?
更新:
如果不使用namespace Acme
I use namespace Acme\Bar
in Bar.php
,则会收到与上图相同的错误消息。
php - 某些选择器语法在 Symfony2 的 CssSelector 组件中不起作用(在 DomCrawler 中)
我有一个关于 dom 爬虫的问题,或者更具体地说,是 CssSelector 组件。当我跑
在一个多维列表上,我得到了所有的直接孩子。但是当我跑步时
我希望得到所有的后代,但我什么也没得到。我究竟做错了什么?
php - 当与 Symfony Components BinaryFileResponse 类一起使用时,为什么 XSendfile 会发出间歇性的乱码响应?
背景
我的应用程序的部分职责是以受控方式处理对静态资源(CSS、JavaScript、图像)的请求。基于一些应用程序逻辑,它会从选择的不同文件中返回一个,这些文件可能在不同时间在该 URL 上提供给不同的用户。因此,这些是静态文件,但以动态方式交付。
该应用程序基于 Symfony 组件,这些静态文件的服务由BinaryFileResponse
类处理。
引导代码调用该trustXSendfileTypeHeader
方法:
应用程序使用一些基于配置的内部逻辑以及检测和使用apache_get_modules()
来确定可用性。如果XSendfile可用并且配置说要使用它,它会设置X-Sendfile-Type
标题:
问题
当我将配置设置为从不使用 XSendfile 或通过 PHP 内置 Web 服务器运行此程序时,显然不支持 XSendfile,一切都很完美。
当我使用 XSendfile 时,它也可以工作——大多数时候。
每隔一段时间,通常如果我快速连续按 f5 键 3-4 次,“某事”就会冒出来,我得到一个乱码的响应。例如,这应该是一个 JavaScript 文件(从 Firebug 中“Net”下的“Response”选项卡复制):
hxYîãx��HTTP/1.1 200 OK 日期:2013 年 2 月 5 日星期二 14:49:10 GMT 服务器:Apache/2.2.22 (Ubuntu) X-Powered-By:PHP/5.4.6-1ubuntu1.1 缓存控制:公共上次修改时间:星期二,2013 年 1 月 29 日 13:33:23 GMT 接受范围:字节内容传输编码:二进制 ETag:“10426f-9f6-0”变化:接受编码内容编码:gzip 内容长度: 1011 Keep-Alive: timeout=5, max=98 Connection: Keep-Alive Content-Type: application/javascript
������VmoÛ6þ,ÿkÀ²ãIý°~q [Üt] XÑt¶H¤@Rv¼Àÿ}w(YS
ÀØ2yïå¹*¾Á>¯¥¥,è) Æ^Ât¸BaÆ\éjgäjí Î&ð*¸Åí¸tY!³Ç$Óe"jÞ![#,n®®oï®A¨þ¸þù××Þ©¼¼ôÇêÚd¹49mv°ÔrtBÖ^;WÍÓÔg´Y¥´FéôÁR9o°35Îà^º´N=UÐèEµ¢XE¸íÒ%ª°¨Úò7¬KñT¾{;£ÈrTnß³étUè{QÀçÍn·:'üJëQÍÄËZeNjOàyÕÁ:#3wö~4Òét1ù$µ
eN)RD| ¶FTØJ·ß½¥¨¸õGç >9TyÜxzgl-J:) b«9ûAQ½KXÉ!yÐÓ] óÆÎ@W¡?¢vún·7j©ÿ¢ðõÖGEÁy\ºp¤÷cKxf?ï*¼Éç0^ïîÌÇ°ñDQ¸mYJ|4t¾ñæËۯŠ¨6:çøp(}þÑò|LÂ;Õ(#v¹* /[¨U|xª æ]ÍyìjµòÛ¯p?4sI¥"v÷ôp|uQ4ò4&Ï·$eÒc¸ xo%7Ôi´2ñx;
TuÙj23 áÊ%ħ¿¹lÌwÀS.&ÏØß7¸}ó ZXzå k2'Zdùè �¦ºû-Ù[Ó²ÿU(¯¤¥=pÃjô¾ç]]Øhhô²× ÙãÚÍ4¨[!Õ}'Òþ^Ð�ûxÿ@+ÚVÞ~áÌáy?d aíD¹·U×ÃÚ] õ5íÃø¨o÷ÂAvUÆmÍaày`¦ä©A?mL[-}®(ÿË d°öò¬}Ç¢ ³Çp1À^6%0 hTô^ts´ÞíWô fO¶ö¢ÎNÜæ·HîUôÔ¶±ÌCµsxh.9åçi Û·_ÈÞØ_ÄãY_Ö}G<ì°ý2wÔ¿aw8/þù\ã±þ"0C oÂh'tE¶À¤¥7I½éßRt. s?á^d|k/Æ)wRw÷cG¿<Þ ¼´°/^ø*ʤAVZ×y¿zÅΪ¥[²Õ1ò_Vµæï_YXÁÕö ��YXÁÕö ��
注意响应正文中标头的存在,其余部分显然不是 JavaScript。开头也有一些虚假字符,这可能是导致标题被推到正文的原因。我试图确定此内容是否是 gzip 压缩的结果,但我还不能确认。(另请参阅下面的更新)
问题
首先,BinaryFileResponse
甚至是用于提供文本(非二进制)文件的正确类吗?该类的文档只说“BinaryFileResponse 表示传递文件的 HTTP 响应”。这不是很详细,但它并没有说明它专门用于“二进制”文件。但是这个名字有它自己的含义,为什么 Fabien 不直接调用这个类FileResponse
呢?
其次,更重要的是,这可能是什么原因造成的?我不认为这是浏览器问题,因为它在 Firefox 和 Chrome 中都是可重复的。这是 XSendfile 模块或BinaryFileResponse
类中的错误吗?(我可能认为它不是前者,因为我之前以更“原始”的方式使用它,而不是通过 Symfony 组件,没有这样的问题)。
有没有其他人经历过这个?知道我应该从哪里开始寻找追踪吗?我已经查看了BinaryResponseFile
源代码,但它对 XSendfile 的作用并不大,只是设置了相关的标头并阻止了响应正文中的内容,据我所知。
更新
我刚刚注意到关于这些乱码响应的一些事情:
- 根本没有发送实际的标头,即在 Firebug 的“标头”选项卡上,对于乱码响应,它只列出请求标头,甚至不显示响应标头的标题。
- 即使我在 PHP 中的 Response 上设置了一些自定义标头,该标头也根本不会出现在乱码响应中(作为标头或响应正文中),但是对于未损坏的响应,自定义标头会正确显示。
php - 如何在 yaml 资源文件中使用控制器作为服务
我正在使用Silex框架。我写了一个简单的路由资源加载器,就是这样使用的:
我能够加载以常规方式命名的路由,例如,在 yaml 文件中
但我无法加载定义为服务的控制器:
能够在资源文件中将控制器用作服务语法需要什么?
谢谢
dependency-injection - Symfony 2 Controller 依赖,扩展 ContainerAware
编辑
在深入研究了 symfony 代码,尤其是 ControllerResolver 之后,似乎我试图做的事情实际上是不可能的,除非我自己继承/实现 ControllerResolverInterface。
这是以下代码,它实例化从路由传递的控制器:
正如你在最后一行看到的,它总是在没有传递参数的情况下被实例化,所以我必须重写这个方法才能以这种方式注入一些东西。感觉很hacky。
原始问题
我试图弄清楚如何使用 Symfony 组件(例如,不是完整的堆栈框架)将服务注入到在动态路由中定义的自定义控制器中。
请注意,我没有使用完整的堆栈框架,也没有使用他们的 DemoBundle src 代码。我有一个composer.json
需要组件的文件,所以我有一个index.php
与此处详述的文件大致相同的自定义文件:
我有以下内容:
然后我有以下内容App/MyBundle/DependencyInjection/MyExtension.php
:
App/MyBundle/Resources/config/services.xml
:
我基本上是在尝试将模板服务注入MyController
构造函数,我的理解是MyExtension
文件应该自动加载。我假设我没有使用完整的堆栈框架,这就是原因,但我怎样才能让它工作呢?
php - 为简单的应用程序生成 PHAR
我正在尝试使用 Symfony2 控制台库构建 CLI 工具。我有一些基本的工作,现在我想把它打包成一个 phar。我已经阅读了一些示例,但我看到的示例非常简单(3 个文件,没有命名空间等)。
在我的src/
目录中,我有以下内容:
上面src/
我有一个console.php
我执行来运行应用程序。我也有一个vendors/
目录,因为我正在使用 composer 安装依赖项。console.php
很简单:
根据我对构建 phar 的了解(很少),我认为我需要将其console.php
作为存根和其他所有内容src/
以及我在vendors/
.
查看phpmaster.com上的示例代码,他们使用 手动指定要包含在 phar 中的每个文件file_get_contents
,但我需要维护我的目录结构以使用作曲家的自动加载器并保持 PSR-0 目录结构。
有没有一种简单的方法来创建 .phar 并在其中维护我的目录结构,以便我仍然可以使用 composer 的自动加载器?
php - Laravel 4 队列:监听超时
我跑了php artisan queue:listen
大约 27 分钟后,它停止处理更多的工作。在我的错误日志中,我看到了错误:
这是一个错误吗?我不认为听众应该超时!
更新
侦听器的第二次运行在 3 小时后超时。我正在使用 php-fgm 在 nginx 上运行 Laravel 4。
symfony - Validator 组件中的翻译
我目前正在将 Symfony 验证器组件集成到自定义 PHP 应用程序中。到目前为止,一切都很好,我可以验证我的用户输入。
现在我想将验证消息翻译到另一个语言环境并集成了翻译组件(由于 DefaultTranslator 中的 TranslatorInterface 的依赖,它无论如何都是必需的)。
默认 Translator 仅支持硬编码到 ValidationConstraints 中的语言环境。据我所知,我需要指定一个自定义 Translator 实例,该实例从 Validator 组件中的 xliff 文件加载字符串。
这是我走了多远,但遗憾的是德语翻译不会加载:
有什么建议我可能会在这里遗漏吗?