我正在使用Symfony 2.1验证模块来验证我的REST API的数据,它工作正常,但我想知道是否有任何简单的方法来验证数组中的项目.例如,我的一个字段是一个日期数组,我想确保里面的每个项目都是正确格式化的日期.
我使用YAML如下设置约束,array_of_dates是我希望能够验证该数组中的每个项目是有效日期的字段.
# src/Acme/DemoBundle/Resources/config/validation.yml
Acme\DemoBundle\Entity\Demo:
properties:
start:
- NotBlank: ~
- Date: ~
end:
- NotBlank: ~
- Date: ~
array_of_dates:
- Type:
type: array
Run Code Online (Sandbox Code Playgroud) 我正在使用puppet进行配置来设置Vagrant环境.
我遇到了一个问题,我希望xdebug在运行时"正常工作" vagrant up但是我需要在php.ini文件中指定主机ip地址xdebug.remote_host,显然这在使用配置的每台机器上会有所不同所以我想在发布时自动更新该值vagrant up.
VagrantFile:
config.vm.network :forwarded_port, guest: 9000, host: 9000
Run Code Online (Sandbox Code Playgroud)
.ini设置:
'xdebug.default_enable=1',
'xdebug.remote_enable=1',
'xdebug.remote_handler=dbgp',
'xdebug.remote_host=localhost:9000',
'xdebug.remote_port=9000',
'xdebug.remote_autostart=0',
'xdebug.max_nesting_level=250'
Run Code Online (Sandbox Code Playgroud)
我也试过了 xdebug.remote_host=localhost
来自vagrant机器的ifconfig结果:
vagrant@precise64 ~ : ifconfig
eth0 Link encap:Ethernet HWaddr 00:0c:29:cf:f9:89
inet addr:192.168.61.142 Bcast:192.168.61.255 Mask:255.255.255.0
Run Code Online (Sandbox Code Playgroud)
phpinfo()函数
REMOTE_ADDR 192.168.61.2
REMOTE_PORT 51886
只是为了确认,如果我remote_host在我的osx主机上给出了我的实际IP地址,它可以正常工作.
我正在使用Symfony中的表单生成器创建表单.我在我的复选框的twig文件中添加了一个属性,其中包含一个&符号和井号,Symfony会自动转义符号,从而阻止它正确显示.无论如何在twig文件或控制器中关闭每个案例的转义,或者在配置中完全关闭它?
{{ form_widget(form.checkbox, { 'attr': {'data-icon-checkmark': '󰀦', 'data-icon-checkmark-checked': '󰀧'} }) }}
Run Code Online (Sandbox Code Playgroud)
我已经为1.X版本的Symfony找到了一些关于此的主题,但是没有2个.
谢谢!
我无法让phpunit在PhpStorm的Symfony项目中phpunit -c app工作- 在OSX终端中工作正常.
这是错误:
Unable to attach test reporter to test framework of test framework quit unexpectedly
/Applications/MAMP/bin/php/php5.4.4/bin/php/private/var/folders/4l/hw8g4qlj6nnc37lfkc6hcj7w0000gn/T/ide-phpunit.php --bootstrap
/Users/greg/Repos/MyApp/app/bootstrap.php.cache --configuration
/Users/greg/Repos/MyApp/app/phpunit.xml.dist
MyApp\MyBundle\Tests\Controller\MyControllerTest
/Users/greg/Repos/MyApp/src/HvH/MyBundle/Tests/Controller/MyControllerTest.php
Testing started at 11:45 AM ...
Process finished with exit code 255
Run Code Online (Sandbox Code Playgroud)
编辑:以下是PHP日志中的错误:
Fatal error: Uncaught exception 'InvalidArgumentException' with message 'The "app/" directory does not exist.' in /Users/greg/Repos/MyApp/vendor/symfony/symfony/src/Symfony/Component/Finder/Finder.php:650
Run Code Online (Sandbox Code Playgroud) 这是一个"最佳实践"问题,而不是实际问题:
我正在研究Symfony 2中的一个项目,我已经构建了一个包来处理我的所有web服务.基本上,一个控制器获取一些JSON数据,将其发送到另一个控制器以检查它是否与描述的格式匹配,然后关闭到另一个控制器以处理数据库调用并最终返回到初始控制器以返回JSON响应.
我通过这样的方式在控制器之间发送数据:
$controller = new \Acme\myBundle\Controller\DefaultController;
$response = $controller->function();
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我一直遇到一个问题.在控制器中我将数据传递给我需要实例化AppKernel并调用启动函数以使任何Symfony函数工作.这对我来说似乎有点愚蠢,这让我相信我可能做错了.
任何建议或提示赞赏!
编辑/更新 感谢大家的评论.我已将控制器设置为服务,服务正在运行但我仍需要在从服务内部调用服务时手动启动/实例化内核.
#config.yml
# API Services
services:
service.handler:
class: Acme\APIBundle\Controller\ServicesController
arguments:
container: "@service_container"
service.definitions:
class: Acme\APIBundle\Controller\DefinitionController
arguments:
container: "@service_container"
Run Code Online (Sandbox Code Playgroud)
从另一个捆绑控制器,我可以从这些服务中的任何一个调用函数没有问题:
$test = $this->get("service.handler")->testFunction();
$test2 = $this->get("service.definitions")->anotherTestFunction();
Run Code Online (Sandbox Code Playgroud)
我遇到问题的地方是如果我在一个服务中调用一个函数,然后尝试从该服务内部调用另一个服务我得到以下PHP错误
Fatal error: Call to a member function get() on a non-object in /vendor/symfony/src/Symfony/Bundle/FrameworkBundle/Controller/Controller.php on line 188
Run Code Online (Sandbox Code Playgroud)
我可以通过使用此函数并调用它而不是使用$ this来避免该错误
public function bootKernel(){
//boot kernel
$controller = new \Acme\myBundle\Controller\DefaultController;
$kernel = new \AppKernel('dev', true);$kernel->loadClassCache();
$kernel->boot();
$controller->setContainer($kernel->getContainer());
return($controller);
}
Run Code Online (Sandbox Code Playgroud)
我想我的解决方案"有效",但它似乎并不是一种有效的方法.
编辑2: 如果我把它放在班级的顶部然后修改服务调用它似乎工作...仍然不确定这是否是最好的做事方式.
protected …Run Code Online (Sandbox Code Playgroud) 我的应用程序使用AWS DynamoDB,我希望能够跟踪Dynamo请求所用的时间,就像我使用Doctrine或Propel时一样.
有些控制器还可以访问一堆自定义服务,理想情况下我也可以跟踪每个服务器的时间.
有没有办法在这些代码块之前和之后将一些钩子添加到我的代码中以跟踪时间并将其添加到探查器时间轴中?
我在我的本地开发服务器上设置了Symfony身份验证,它在prod和dev环境中都运行良好,今天我注册了一个域进行测试并将我的代码推送到AWS EC2服务器,我可以进入登录页面没有问题但是一旦我尝试登录,我就会直接重定向回登录页面而不会出现任何错误.似乎当它提交到login_check时,它会直接重定向到/ login.我已尝试使用和不使用调试清除和加热生产缓存,这似乎无法解决问题.我的prod.log文件中没有错误.
有关如何排除故障的任何建议?
谢谢.
编辑: 这是在开发日志中显示的:
[2012-03-26 22:52:59] security.INFO: Authentication request failed: Your session has timed-out, or you have disabled cookies. [] []
[2012-03-26 22:52:59] security.DEBUG: Redirecting to /login [] []
Run Code Online (Sandbox Code Playgroud)
编辑 每次刷新页面时,我都会获得两个新的cookie sub.domain.com和.domain.com - 如果我在/ tmp/dir中查看保存会话的服务器,则会在每个页面上创建6个新会话刷新,chrome dev工具中显示的两个都没有数据.我的本地开发服务器上不存在此问题.关于什么可能导致这一点的任何建议赞赏!
编辑 - 解决方案
我从Chrome中删除了Cookie,它突然开始工作了.不知道问题的根源是什么,但现在似乎一切正常.
我正在尝试找到jenkins存储git存储库的目录,我需要能够设置AWS开发工具,以便我可以运行shell命令到aws.push到beanstalk.由于某种原因,具有工作文件的目录似乎具有与之关联的不正确的分支信息.
jenkins@192.168.1.1:~/jobs/myPHPapp/workspace$ git status
# Not currently on any branch.
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# default/
Run Code Online (Sandbox Code Playgroud)
从github导入的分支jenkins是我的'dev'分支,奇怪的是它只显示master.Jenkins是否在其他地方保存了另一个存储库副本?
使用Symfony 2.0.x,我将所有客户端依赖项(jQuery等)存储在deps文件中,因此我可以使用vendor/install轻松更新所有这些依赖项,并且在2.1中切换到composer,这是不可能的.我的选择似乎是:
有没有人有解决方案来解决这个问题,还是我认为这一切都错了?
我正在使用Symfony Validator,没有表单组件.
我有一个包含子实体的实体,目前我可以验证该字段是子实体的实例,但我还需要它来验证子实例的约束.
#validation.yml
# This is the entity I'm validating against, it checks the type but doesn't then validate
# it against the child entity below.
Greg\PropertyBundle\Entity\Property:
properties:
property_id:
- NotBlank: ~
- Type:
type: string
addresses:
- All:
- Type:
type: Greg\PropertyBundle\Entity\Address
# child entity
Greg\PropertyBundle\Entity\Address:
properties:
city:
- NotBlank: ~
- Type:
type: string
Run Code Online (Sandbox Code Playgroud)
要调用验证器,我将DI传递给我的一个服务并执行此操作:
// Validate the data
$errorList = $this->validator->validate($data);
Run Code Online (Sandbox Code Playgroud)
我也通过传递以下标志来尝试它:
$errorList = $this->validator->validate($data, null, true, true);
Run Code Online (Sandbox Code Playgroud) 我将如何验证日期是 ISO8601,特别是 RFC3339?我需要编写一些自定义的正则表达式来做到这一点吗?
我正在尝试在 Symfony2 中使用 Monolog Loggly 处理程序,但无法让它工作:
# config.yml
monolog:
handlers:
main:
type: stream
token: my-loggly-token
level: info
handler: loggly
tag: symfony-app
Run Code Online (Sandbox Code Playgroud)
我已经删除了 monolog 条目config_dev.yml,config_prod.yml因此上面的设置没有被覆盖。在控制器内部,我试图触发一个信息事件,但它没有出现在 Loggly 中。我哪里错了?
我正在为循环中的每个项目发出一个AJAX请求,结束REST服务一次只能执行一个请求,所以我需要循环来等待每个请求完成,然后继续下一个.我该怎么做呢?
作为参考,终端服务正在DynamoDB表上执行更新任务 - 一次只能修改一个表因此我要求等到我在继续之前得到响应.我可以将它们全部发送到服务器,然后在那里处理,尽管这使得每次更新完成时很难收到反馈.
angular.forEach($scope.someArray,
function (value) {
var postdata = {
bla: value
};
$http.post('/some_url', postdata)
.then(
function(result) {
console.log("Success.");
},
function(data) {
console.log("Failure.");
}
);
}
);
Run Code Online (Sandbox Code Playgroud) symfony ×10
symfony-2.1 ×3
php ×2
angularjs ×1
bundle ×1
composer-php ×1
controller ×1
git ×1
iso8601 ×1
jenkins ×1
loggly ×1
monolog ×1
phpstorm ×1
phpunit ×1
puppet ×1
symfony-2.2 ×1
twig ×1
vagrant ×1
validation ×1
xdebug ×1