我将我的项目从2.6升级到2.7,我在工作结束时收到此错误:
[Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException]
The service "knp_paginator.helper.processor" has a dependency on a non-existent service "templating.helper.router".
Run Code Online (Sandbox Code Playgroud)
我搜索服务容器,但我找不到服务列表中的服务(容器:调试),我在这个文件中找到了"templating.helper.router"的服务定义
/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Resources/config/templating_php.xml
Run Code Online (Sandbox Code Playgroud)
为什么这个服务不是由服务容器创建的?
/usr/bin/php /var/www/ghanbari/anar/app/console debug:container --tag=templating.helper -v
Deprecated: The Symfony\Component\DependencyInjection\Definition::setFactoryMethod method is deprecated since version 2.6 and will be removed in 3.0. Use Definition::setFactory() instead. in /var/www/ghanbari/anar/vendor/symfony/symfony/src/Symfony/Component/DependencyInjection/Definition.php on line 137
Call Stack:
0.0004 227656 1. {main}() /var/www/ghanbari/anar/app/console:0
0.0161 2719288 2. Symfony\Component\Console\Application->run() /var/www/ghanbari/anar/app/console:27
0.0178 2896416 3. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() /var/www/ghanbari/anar/vendor/symfony/symfony/src/Symfony/Component/Console/Application.php:126
0.0178 2896640 4. Symfony\Component\HttpKernel\Kernel->boot() /var/www/ghanbari/anar/vendor/symfony/symfony/src/Symfony/Bundle/FrameworkBundle/Console/Application.php:70
0.0210 3132184 5. Symfony\Component\HttpKernel\Kernel->initializeContainer() /var/www/ghanbari/anar/app/bootstrap.php.cache:2387
0.0801 6683560 6. Symfony\Component\DependencyInjection\ContainerBuilder->compile() /var/www/ghanbari/anar/app/bootstrap.php.cache:2609
0.0806 6716880 7. Symfony\Component\DependencyInjection\Compiler\Compiler->compile() …Run Code Online (Sandbox Code Playgroud) 假设我们有两个实体(Profile和Address).配置文件可以包含许多地址.在那种情况下,我们有:
Profile:
...
fields:
...
oneToMany:
addresses:
targetEntity: Address
mappedBy: profile
orphanRemoval: true
Address:
...
fields:
...
manyToOne:
profile:
targetEntity: Profile
inversedBy: addresses
joinColumn:
name: profile_id
referencedColumnName: id
onDelete: cascade
Run Code Online (Sandbox Code Playgroud)
现在,如果我删除了一个包含许多地址的配置文件:
$em->remove($profile);
Run Code Online (Sandbox Code Playgroud)
地址如何删除?
Doctrine是否获取与此配置文件相关的所有地址,然后将其删除或仅删除配置文件并让数据库处理地址?
我找到了一些关于Hibernate的答案,但没有关于Doctrine的答案.
编辑:从Doctrine书中添加三个注释
1.如果关联标记为CASCADE = REMOVE,则Doctrine 2将获取此关联.如果它是Single关联,它将传递此实体
EntityManager#remove().如果关联是一个集合,Doctrine将循环遍历其所有元素并将其传递给EntityManager#remove().在这两种情况下,级联删除语义都是递归应用的.对于大型对象图,此删除策略可能非常昂贵.2.使用DQL DELETE语句允许您使用单个命令删除某个类型的多个实体,而不对这些实体进行保湿.这可以非常有效地从数据库中删除大对象图.
3.使用外键语义onDelete ="CASCADE"可以强制数据库在内部删除所有关联的对象.这个策略有点难以正确,但可以非常强大和快速.但是您应该知道,使用策略1(
CASCADE=REMOVE)完全绕过任何外键onDelete=CASCADE选项,因为Doctrine将显式提取并删除所有关联实体.
我有三个名为控制器BlogController,PostController,CommentController即CommentController是子资源PostController和PostController子资源BlogController.
/**
* @Rest\RouteResource("blog", pluralize=false)
*/
class BlogController extends FOSRestController
{
public function getAction($blogUri)
{
...
}
}
/**
* @Rest\RouteResource("post", pluralize=false)
*/
class PostController extends FOSRestController
{
public function getAction($postId)
{
...
}
}
/**
* @Rest\RouteResource("comment", pluralize=false)
*/
class CommentController extends FOSRestController
{
public function getAction($commentId)
{
...
}
}
Run Code Online (Sandbox Code Playgroud)
使用routing.yml
mgh_blog:
resource: MGH\BlogBundle\Controller\BlogController
type: rest
mgh_blog_post:
resource: MGH\BlogBundle\Controller\PostController
type: rest
parent: mgh_blog
mgh_blog_post_comment: …Run Code Online (Sandbox Code Playgroud) 我使用注释的input属性@ApiDoc来指定我的api的参数,这些参数是表单的字段.
* @ApiDoc(
* section="User",
* resource=true,
* input={
* "class"="Nik\UserBundle\Form\UserType",
* },
* ....
Run Code Online (Sandbox Code Playgroud)
data_class of form是一个对属性进行约束验证的实体.
我希望nelmio api doc将参数格式指定为实体的验证约束,但格式为空.
如何在nelmio ApiDocBundle中指定参数格式?
编辑:也许我写了一个糟糕的问题.
我们可以为input&指定解析器output,如果我们没有为这些指定解析器,它会为input&调用所有解析器output,然后调用所有解析器UserType.
nelmio有一个名为ValidationParser的解析器,它有一个名为parseConstraint的方法,format用于输入和输出,但是这个方法没有为我的文档调用,为什么?
我设置了谷歌开发者控制台,支持Android版Google云消息传递.
在凭证方面,我创建了在引用中键入0.0.0.0的浏览器API密钥.实际上我创建了两种类型的键,因为我在不同的教程中找到了不同的指示.
我用这个PHP脚本测试了密钥
<?
/**
* The following function will send a GCM notification using curl.
*
* @param $apiKey [string] The Browser API key string for your GCM account
* @param $registrationIdsArray [array] An array of registration ids to send this notification to
* @param $messageData [array] An named array of data to send as the notification payload
*/
function sendNotification( $apiKey, $registrationIdsArray, $messageData )
{
$headers = array("Content-Type:" . "application/json", "Authorization:" . "key=" . …Run Code Online (Sandbox Code Playgroud) 我知道在网站上存在类似的问题,但我感到困惑,因为http并且xmpp有差异限制:
这个页面说http和之间的差异xmpp.
第一个限制是[ xmpp&http]:最多4KB的数据
第二个限制是:
http:您可以一次向1000个用户发送消息.(参考)
xmpp:对于每个发件人ID,GCM允许并行1000个连接.(参考)
您可以一次向1000个用户发送消息.因此,如果您有更多用户,则必须多次从服务器发送邮件,但每次都要向不同的用户发送邮件(参考)
第三个限制是:
http:我在android开发人员中找不到这个限制:
在没有折叠的情况下可以存储的消息数量有限制.该限制当前为100.如果达到限制,则丢弃所有存储的消息.然后,当设备重新联机时,它会收到一条特殊消息,指示已达到限制.然后,应用程序可以正常处理这种情况,通常是通过请求完全同步.(参考)
xmpp:
发送到CCS的每条消息都会收到ACK或NACK响应.未收到其中一个响应的邮件被视为待处理.如果挂起的消息计数达到100,则应用服务器应停止发送新消息并等待CCS确认某些现有的待处理消息(参考)
我的问题:
1.in第二个限制,如果我们使用http方法并拥有2000个用户,我们应该发送两次消息,每次都有1000个用户吗?,我们能做到吗?
2. xmpp不能支持组播消息,我们可以使用主题进行组播xmpp吗?
4.在第三个限制,如果我向300个用户发送消息,并且有100个顶级用户离线,他们收到message还是notification回来并在线时?(注意:使用广播http和循环xmpp)
以主题方式限制效果?
在http和之间的第三个限制是否存在任何差异xmpp?
7. http或存在其他限制xmpp?
symfony ×4
symfony-2.7 ×3
android ×2
doctrine ×1
doctrine-orm ×1
google-api ×1
http ×1
knppaginator ×1
messaging ×1
php ×1
xmpp ×1