window.setInterval(function(){
//do stuff
}, milisec);
Run Code Online (Sandbox Code Playgroud)
有没有办法随意停止这个间隔,并从它持续的地方恢复它?比如说,代码每5秒运行一次.我在第二秒的中间停止它,当恢复时,我希望它运行剩余的3秒并且每隔5秒继续运行.再次.
我一直在玩socket.io的聊天,我有一个问题:如何在聊天室中区分管理员用户和普通用户?我希望管理员拥有像踢和禁止人的权力,但我的用户却没有.
我正在使用Symfony开发我的应用程序,我想将其用户数据库用于聊天用户.我正在为我的Symfony应用程序的用户使用FOSUserBundle.它们被分成多个组,所以我有这个admin组,还有其他组.
该admin组具有ROLE_ADMIN这意味着其中的每个用户都具有该角色.这是管理员组,该组中的每个用户都应具有禁止,踢,静音等聊天室中其他用户的权限.
为了在聊天中使用我的Symfony用户,我一直在阅读Redis以获取他们的会话,但我不确定如何区分我的管理员用户和普通用户.如何阻止常规用户向服务器发出请求,该服务器执行用户无权访问的内容?因为任何人都可以提出请求,但是如果这些请求来自存储在Apache服务器上的MySQL数据库中的用户,我该如何验证这些请求呢?
如果不是Symfony,如何在常规PHP应用程序中完成此操作?最后,如何定义管理员并不重要,但如何将他连接到节点服务器以及如何使节点服务器与我的用户数据库一起工作.
我只想加密并将用户的数据发送到节点服务器,然后在那里解密.只有两个服务器知道私钥,因此即使客户端接收到加密数据,他也无法向其他客户端发出请求.我可以做一些IP检查和时间戳.然后可以使用节点服务器上的解密数据来说明用户是否是管理员并允许他发送某些请求.这是一个好主意还是有更好的方法?
;(function ($, window, document, undefined) {
//code
}(jQuery, this, this.document));
Run Code Online (Sandbox Code Playgroud)
这是我第一次看到这样的东西.它是什么以及如何解释?我不明白为什么它必须传递this和this.document,以及'undefined'是什么.
我问的原因是因为我把它包含在我的页面中
if($('ul.mtree').length)
Run Code Online (Sandbox Code Playgroud)
返回false,尽管它在控制台中输入时返回true.
我有一个私人消息包/实体,允许我的用户在它们之间发送消息.
其领域如下:
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
* @Assert\NotBlank(message="private_message.title.blank")
* @ORM\Column(name="title", type="string", length=50)
*/
protected $title;
/**
* @Assert\NotBlank(message="private_message.receiver.blank")
* @AcmeAssert\IsHimself(message="private_message.receiver.himself", groups={"new"})
* @ORM\ManyToOne(targetEntity="MedAppBundle\Entity\User")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $receiver;
/**
* @ORM\ManyToOne(targetEntity="MedAppBundle\Entity\User")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $sender;
/**
* @var string
* @Assert\NotBlank(message="private_message.content.blank")
* @ORM\Column(name="content", type="string")
*/
protected $content;
/**
* @var \DateTime
*
* @ORM\Column(name="sentAt", type="datetime")
*/
protected $sentAt;
/**
* @var boolean
*
* …Run Code Online (Sandbox Code Playgroud) 我已经创建了一个自定义的Sonata页面
简单的路线
medapp_adminStreamCommands:
path: /admin/stream
defaults: { _controller: MedAppBundle:VideoChat/VideoChat:adminStreamCommands }
Run Code Online (Sandbox Code Playgroud)
返回管理池的控制器
public function adminStreamCommandsAction(Request $request)
{
return $this->render('@MedApp/AdminSonata/Stream/stream_commands.html.twig', array(
'admin_pool' => $this->get('sonata.admin.pool')));
}
Run Code Online (Sandbox Code Playgroud)
普通视图模板
{% extends '@MedApp/AdminSonata/standard_layout.html.twig' %}
{% block content %}
foobar
{% endblock content
Run Code Online (Sandbox Code Playgroud)
这是有效的,我可以在我的网站上访问它/admin/foo,我得到一个页面,其中包含Sonata管理模板和我的'foobar'内容.
我的问题是,如何在不修改默认模板的情况下将此路线添加到左侧和顶部导航栏?这是因为左侧菜单由KNP菜单呈现:
{% block side_bar_nav %}
{% if app.user and is_granted('ROLE_SONATA_ADMIN') %}
{{ knp_menu_render('sonata_admin_sidebar', {template: admin_pool.getTemplate('knp_menu_template')}) }}
{% endif %}
{% endblock side_bar_nav %}
Run Code Online (Sandbox Code Playgroud)
我不知何故需要添加我的新页面以通过此菜单呈现.
通常,页面是通过服务添加的,但这些页面是在实体之上构建的:
servicename:
class: Bundle\Class
arguments: [~, Bundle\Entity\Entityname, ~]
tags:
- { name: sonata.admin, manager_type: orm, group: admin, …Run Code Online (Sandbox Code Playgroud) 我看了看这个问题.我正在寻找一种方法来做那个问题的OP也想要的,那就是在发送http响应之后继续处理php,但是在Symfony2中.
我实现了一个在每次内核终止后触发的事件.到目前为止一切都那么好,但我想要的是它在CERTAIN终止后,在特定的控制器动作中触发,例如在发送表单之后,而不是每次请求时.这是因为我想在某些时候做一些繁重的任务,并且不希望最终用户等待页面加载.
知道我该怎么办?
<?php
namespace MedAppBundle\Event;
use JMS\DiExtraBundle\Annotation\InjectParams;
use JMS\DiExtraBundle\Annotation\Service;
use JMS\DiExtraBundle\Annotation\Tag;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use JMS\DiExtraBundle\Annotation\Inject;
/**
* Class MedicListener
* @package MedAppBundle\EventListener
* @Service("medapp_test.listener")
* @Tag(name="kernel.event_subscriber")
*/
class TestListener implements EventSubscriberInterface
{
private $container;
private $logger;
/**
* Constructor.
*
* @param ContainerInterface $container A ContainerInterface instance
* @param LoggerInterface $logger A LoggerInterface instance
* @InjectParams({
* "container" = @Inject("service_container"),
* "logger" = @Inject("logger")
* })
*/ …Run Code Online (Sandbox Code Playgroud) 我制作了一个模糊的模板,代表学生在某个领域的知识.问题是,在声明学生John的low,他也将被宣布为med是因为低的学生也30和40之间的MED值.
我怎么能宣布学生是low,而不是med?
请注意,我知道我可以做类似的事情(student (name John) (knowledge (20 0) (21 1) (22 0))),但如果我想使用模糊值声明他怎么办?
(deftemplate fz-knowledge
0 100
( (low (20 1) (40 0))
(med (30 0) (50 1) (70 0))
(high (60 0) (80 1))
))
(deftemplate student
(slot name)
(slot knowledge (type FUZZY-VALUE fz-knowledge))
)
(deffacts students
(student (name John) (knowledge low) )
)
Run Code Online (Sandbox Code Playgroud) 这是我的Message实体.它是一个在我的应用程序中定义用户之间的消息的类.
class Message
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @var string
* @Assert\NotBlank(message="private_message.title.blank")
* @ORM\Column(name="title", type="string", length=50)
*/
protected $title;
/**
* @Assert\NotBlank(message="private_message.receiver.blank")
* @ORM\ManyToOne(targetEntity="MedAppBundle\Entity\User")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $receiver;
/**
* @ORM\ManyToOne(targetEntity="MedAppBundle\Entity\User")
* @ORM\JoinColumn(referencedColumnName="id")
*/
protected $sender;
/**
* @var string
* @Assert\NotBlank(message="private_message.content.blank")
* @ORM\Column(name="content", type="string")
*/
protected $content;
/**
* @var \DateTime
*
* @ORM\Column(name="sentAt", type="datetime")
*/
protected $sentAt;
/**
* @var boolean
*
* @ORM\Column(name="isSpam", …Run Code Online (Sandbox Code Playgroud) 我正在尝试自定义StripeBundle的模板,分别是结帐模板vendor\payum\stripe\Payum\Stripe\Resources\views\Action\obtain_checkout_token.html.twig.
这是因为我希望Stripe弹出窗口显示在与付费对象相同的页面中,而不是在单个按钮的单独页面上.说,我想支付产品费用,我在结帐页面按"付款",并希望条纹弹出窗口出现在那里.
我看了一下另一个类似的问题,但我似乎无法让它运作起来.我已尝试app/Resources使用PayumStripeBundle,Payum,Payum/Stripe中的每个文件夹名称组合,但它们似乎都没有覆盖使用过的模板.
bundle的结构也很奇怪,因为它的命名空间是Payum\Bundle\PayumBundle,但是不是包含模板的bundle的Stripe组件在另一个文件夹中.
这个值设置在这里,所以也许Symfony永远不会在文件夹中找到它?
文件夹结构应该如何app/Resources,如果它以这种方式工作?或者,如果这是另一种方式.
我有一个Symfony2网站,我正在测试生产.我继续清理缓存,因为我已经制作并可能会进行更多修改,但是存在一个小问题:
当缓存被清除并说,之后我想热身,访问网站的人重建缓存.这会在构建缓存时产生一个小问题,但不会完全,而其中一半会被删除,因为删除仍在进行中.
之后发生的是,缓存是构建的,但只是其中的一部分.Symfony认为缓存是完全构建的,并且运行时不再尝试构建它,但它运行在半构建的缓存上.删除过程有点长(约15秒),因此在此时间范围内,任何人都必须通过访问网站来尝试创建缓存.
无论是,还是缓存是完全构建的,它都会覆盖旧缓存,系统会将这些新文件视为旧文件,删除部分文件,保留其他文件.不完全确定,我不确定如何检查这个.
例如,我得到的一个错误是
The directory "D:\xampp\htdocs\med-app\app\app\cache\dev/jms_diextra/metadata" does not exist.
Run Code Online (Sandbox Code Playgroud)
如果我不使用该捆绑包,我会从Doctrine中获得另一个缓存问题.这将出现在每个网站访问,直到我再次删除缓存没有任何人访问该网站.它完全阻止访问网站并使其无法正常运行.
还有,热身怎么样?这也需要一段时间.如果有人在缓存预热时访问网站怎么办?这不会造成冲突吗?
怎么处理这个问题?我是否需要关闭apache服务,清除和加热缓存然后重启apache?如何处理生产中的网站?
编辑
我发现了一些有趣的东西.删除cache/prod文件夹时发生错误.如果我删除文件夹的内容而不删除文件夹本身,似乎不会发生错误.我想知道为什么.
php ×7
symfony ×7
javascript ×2
twig ×2
arrays ×1
caching ×1
clips ×1
fuzzy-logic ×1
httpresponse ×1
jquery ×1
node.js ×1
payum ×1
socket.io ×1
sockets ×1
sonata-admin ×1