我们正在Symfony 2中从头开始构建业务应用程序,我在用户注册流程中遇到了一些问题:在用户创建帐户后,他们应该使用这些凭据自动登录,而不是立即被迫再次提供他们的证书.
任何人都有这方面的经验,或能够指出我正确的方向?
在Web应用程序中使用Symfony2中的ACL实现时,我们遇到了一个用例,其中建议的使用ACL的方法(检查单个域对象的用户权限)变得不可行.因此,我们想知道是否存在可用于解决问题的ACL API的某些部分.
用例位于控制器中,该控制器准备要在模板中呈现的域对象列表,以便用户可以选择她想要编辑的对象.用户无权编辑数据库中的所有对象,因此必须相应地过滤列表.
这可以(根据其他解决方案)根据两种策略完成:
1)一个查询过滤器,它使用当前用户的ACL为对象(或多个对象)附加有效对象id的给定查询.即:
WHERE <other conditions> AND u.id IN(<list of legal object ids here>)
Run Code Online (Sandbox Code Playgroud)
2)一个查询后过滤器,用于删除用户在从数据库中检索完整列表后没有正确权限的对象.即:
$objs = <query for objects>
$objIds = <getting all the permitted obj ids from the ACL>
for ($obj in $objs) {
if (in_array($obj.id, $objIds) { $result[] = $obj; }
}
return $result;
Run Code Online (Sandbox Code Playgroud)
第一种策略是可取的,因为数据库正在进行所有过滤工作,并且都需要两次数据库查询.一个用于ACL,一个用于实际查询,但这可能是不可避免的.
在Symfony2中是否有任何一种策略(或实现预期结果)的实现?
我正在Symfony2中构建一个具有社交驱动方面的应用程序(用户在网站上执行的许多操作将显示在"新闻提要"样式列表中供其他人查看).我已经确定sf2事件调度程序/侦听器系统是处理这个问题的最佳方法,但是我试图配置我的侦听器来处理许多不同的事件时遇到了一些麻烦.
我在搜索中发现的(现在过时的)文档似乎表明,在某一时刻,事件监听器可以注册多个事件,但代码已经重构,现在配置看起来像这样:
config.yml:
services:
social.listener:
class: F\Q\C\N\SocialEventListener
tags:
- { name: kernel.listener, event: onSocialShare }
Run Code Online (Sandbox Code Playgroud)
有没有办法:
event: [onSocialShare, onSocialFriend, onSocialCreate]作品,但感觉它会很快变得丑陋和不可维护,可能会破坏我的配置文件,可能有数十个社交活动提前致谢.
这就是我所追求的
<!-- language: lang-xml -->
<ws:Test>
<ws:somename2>somevalue2</ws:somename2>
<ws:make>
<ws:model>foo</ws:model>
<ws:model>bar</ws:model>
</ws:make>
</ws:Test>
Run Code Online (Sandbox Code Playgroud)
这是我目前的代码
<!-- language: lang-php -->
$xmlTest = new SimpleXMLElement('<Test/>', 0, false, 'ws', true);
$xmlTest->addChild("ws:somename2", "somevalue2", 'http://microsoft.com/wsdl/types/');
$make = $xmlTest->addChild('ws:make', null, 'ws');
#$make->addAttribute('name','Ford');
$make->addChild('ws:model', 'foo', 'ws');
$make->addChild('ws:model', 'bar', 'ws');
header ("Content-Type:text/xml");
print_r($xmlTest->asXML());
Run Code Online (Sandbox Code Playgroud)
但它输出
<!-- language: lang-xml -->
<Test>
<ws:somename2>somevalue2</ws:somename2>
<ws:make>
<ws:model>foo</ws:model>
<ws:model>bar</ws:model>
</ws:make>
</Test>
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,测试中缺少ws:
我正在使用Symfony2开发一个可翻译的应用程序.该应用程序已启用Assetic以缩小和组合*.js和*.css文件.但是,我有一个我写的jQuery插件,里面有文字字符串.例如,请考虑以下代码:
$('<p>Are you sure you want to proceed?</p>').dialog({
buttons: {
"Yes" : function() {
// ...
},
"No" : function() {
// ...
}
}
});
Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中,"你确定......","是"和"否"将始终是英文,我不能在.js文件中使用Twig模板来翻译它,例如:{{"是"| trans}}
我想知道的是,使用Twig利用内置的Symfony2转换机制来翻译我的JS脚本中的文字字符串的最佳方法是什么.
有没有办法创建例如:myscript.js.twig文件?
我想编写一个可以将EST(USEast标准时间)的时间转换为另一个本地时区的时间的函数.
输入将是"时间在EST",格式为"Ymd H:i:s"(即2011-08-23 05:05:35),"城市","州"和"国家"
该功能应返回当地时间(即如果城市,州,国家是旧金山,加利福尼亚州,美国,并且EST的时间是2011-08-23 05:05:35,功能应该返回2011-08-23 02: 05:35)
我试图从php.net搞清楚,但似乎我需要一个大陆来指定时区......我不知道如何将一个国家转换为一个大陆.
谢谢
我正在使用Doctrine 2作为我的ORM,事情进展顺利,但我一直在想这个EntityManager#persist()方法.在"坚持实体"文件说,要调用下面persist()的对象X:
如果X是预先存在的托管实体,则persist操作会忽略它.
这使我相信persist()只有当对象是新的并且尚未保存到数据库时才需要调用.但是,"Deferred Explicit"更改跟踪策略的文档说:
... Doctrine 2仅考虑通过调用EntityManager#persist(entity)明确标记用于更改检测的实体...
...听起来像persist()必须在对象上调用它才能进行更新.什么时候应该persist()叫?如果仅对新对象进行操作,那么无论何时更新实体并让Doctrine解决差异,是否存在重要的性能影响?
我正在编写一个服务,将有关另一个请求的数据返回给使用者(例如,从bitly或t.co地址检索未缩短的URL).在大多数情况下,我可以返回一个状态代码来镜像我从服务器收到的代码,但是当我的服务无法连接到请求的URL时(例如,如果它不存在),最适合的状态代码是什么?我在想400 Bad Request或者408 Request Timeout,但这里有最好的做法吗?
我刚开始使用MySQL和PHP,我想知道是否可以创建自定义函数.这段代码片段应该说明我正在尝试做什么.
// a somewhat complicated formula not suitable to embed into the query
function Distance($latA, $lonA, $latB, $lonB)
{
// earth's radius
$radius = 3956;
$latA = deg2rad($latA);
$lonA = deg2rad($lonA);
$latB = deg2rad($latB);
$lonB = deg2rad($lonB);
// calculate deltas
$deltaLat = $latB - $latA;
$deltaLon = $lonB - $lonA;
// calculate Great Circle distance
$result = pow(sin($deltaLatitude / 2.0), 2) + (cos($latA) * cos($latB) * pow(sin($deltaLon / 2.0), 2));
$distance = $radius * 2 * atan2(sqrt($result), sqrt(1 - $result)); …Run Code Online (Sandbox Code Playgroud) 假设我有一个可以有1-n范围的优惠.你立刻想到,"把一个offer_id放在Range中".
但我的Offer有一个复合主键(由两个字段组成).没有AUTOINCREMENT id列.
Doctrine2文档没有说明这个特定情况,这是我的实体:
<?php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table()
* @ORM\Entity
*/
class Offer
{
/**
* @var Site $site
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Site")
* @ORM\JoinColumn(name="site_id", referencedColumnName="id")
*/
private $site;
/**
* @var string $pouet
* @ORM\Id
* @ORM\Column(name="pouet", type="string", length=255)
*/
private $pouet;
}
<?php
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Table(name="RangeItem")
* @ORM\Entity
*/
class Range
{
/**
* @todo This is test code only do not push me :-)
* @var ArrayCollection
* @ORM\ManyToOne(targetEntity="Offer") …Run Code Online (Sandbox Code Playgroud) php ×7
symfony ×5
doctrine-orm ×2
function ×2
acl ×1
datetime ×1
events ×1
http ×1
http-headers ×1
mysql ×1
permissions ×1
registration ×1
simplexml ×1
timezone ×1
twig ×1