在关于翻译的 Symfony2指南之后,我发现从http标头(存储在$this->get('session')->getLocale())中的推断区域设置是错误的(发送它,推断en):
主机localhost用户代理Mozilla/5.0(Windows NT 6.1; WOW64; rv:7.0.1)Gecko/20100101 Firefox/7.0.1接受text/html,application/xhtml + xml,application/xml; q = 0.9,/ ; q = 0.8 Accept-Language it-it,it; q = 0.8,en-us; q = 0.5,en; q = 0.3
这是正常行为吗?或者我应该设置一些东西,以使本地化开箱即用?
我正在使用Memcached服务器(以及memcache PHP扩展)来缓存验证器元数据和Doctrine metatada/result/query缓存驱动程序.
一切都按预期工作,与文件系统缓存相比速度很快.
我的问题是,命令是否:
php app/console cache:clear --env=prod --no-debug
Run Code Online (Sandbox Code Playgroud)
自动清除所有类型的缓存(包括memcache)?
运行此命令并检查服务器统计信息后,项目计数始终与缓存占用相同:

我的配置,其中%prod_cache%参数实际上是字符串memcache:
# Framework Configuration
framework:
validation:
cache: %prod_cache% # Matches validator cache service
# Doctrine Configuration
doctrine:
orm:
metadata_cache_driver:
type: service
id: cache_%prod_cache%
result_cache_driver:
type: service
id: cache_%prod_cache%
query_cache_driver:
type: service
id: cache_%prod_cache%
# DoctrineCacheBundle Configuration
doctrine_cache:
providers:
memcache:
type: memcache
alias: cache_memcache
# Services
services:
validator.mapping.cache.memcache: # Validator cache service
class: Symfony\Component\Validator\Mapping\Cache\DoctrineCache
arguments: [@cache_memcache]
Run Code Online (Sandbox Code Playgroud) 是否可以公开Symfony2验证规则(对于给定的实体)?我找不到这样的东西.我正在尝试使用DRY方法进行客户端验证(使用backbone.js).像捆绑或任何提示的东西会有所帮助.
这是组件验证器.一种可能性是:
使用Symfony2标准方法定义服务器端验证规则.示例(YAML,取自他们的网站):
# src/Acme/BlogBundle/Resources/config/validation.yml
Acme\BlogBundle\Entity\Author:
properties:
name:
- NotBlank: ~
Run Code Online (Sandbox Code Playgroud)
请/author/rules返回一个JSON对象从实体域映射到一个"编译"正则表达式.我不太确定这一点,但我认为内部Symfony2将validation.yml规则编译成正则表达式.
假设一个作者实体由name字段构成NotBlank(注意我不是正则表达式中的主人,这是另一个问题的复制和粘贴):
{ 'name' : '^\s*\S' }
Run Code Online (Sandbox Code Playgroud)
最后检索该JSON对象并使用backbone.js系统进行客户端验证.可能做缓存.例如(警告!里面的伪代码代码validate()):
<script>
$(function () {
window.MyApp = window.MyApp || { Models : {}, Views : {}, Router : {} };
window.MyApp.Models.Author = Backbone.Models.extend({
initialize : function() { _.bindAll(this, 'validate') },
validator : $.get('/author/rules');
validate: function(attrs) {
// …Run Code Online (Sandbox Code Playgroud) 我正在使用JMSI18nRoutingBundle进行路由转换,使用自定义配置,这不是所有路由的前缀:
# app/config/config.yml
jms_i18n_routing:
default_locale: it
locales: [it, en]
strategy: custom
www.example.com/contatti
www.example.com/contact
Run Code Online (Sandbox Code Playgroud)
这很好用,就像捆绑一样.不是我必须开发项目的管理部分,当然是保护它.我陷入安全配置(摘录):
# app/config/config.yml
security:
firewalls:
secured_area:
pattern: ^/
anonymous: ~
form_login:
login_path: /login
check_path: /login_check
Run Code Online (Sandbox Code Playgroud)
login_path是静态定义使用security.yml.那么,我应该如何指定正确的登录(本地化)路径?假设form是accessibile使用:
www.example.com/accesso
www.example.com/login
Run Code Online (Sandbox Code Playgroud) 在我的Windows开发机器上,我将语言环境设置为ita:
setlocale(LC_TIME, 'ita');
echo strftime('%b'); // dic
Run Code Online (Sandbox Code Playgroud)
虽然(我想,现在无法测试)在*nix系统上,我应该使用it:
setlocale(LC_TIME, 'it');
Run Code Online (Sandbox Code Playgroud)
如果我尝试it在我的Windows 上设置它不起作用,打印Dec.
看来我不能依赖setlocale(),所以我应该IntlDateFormatter按照@hakre的建议使用.但是,我可以找到给我一个月份名称和短名称的常量:
IntlDateFormatter::NONE (integer)
Do not include this element
IntlDateFormatter::FULL (integer)
Completely specified style (Tuesday, April 12, 1952 AD or 3:30:42pm PST)
IntlDateFormatter::LONG (integer)
Long style (January 12, 1952 or 3:30:32pm)
IntlDateFormatter::MEDIUM (integer)
Medium style (Jan 12, 1952)
IntlDateFormatter::SHORT (integer)
Most abbreviated style, only essential data (12/13/52 or 3:30pm)
Run Code Online (Sandbox Code Playgroud) 我想kernel.request在Symfony 2中为事件编写基本监听器.服务定义非常简单,注释来自JMSDiExtraBundle.
问题是,即使用户完全通过身份验证,它$context->getToken()也始终为null:
/**
* @Service("request.set_messages_count_listener")
*
*/
class RequestListener
{
/**
* @var \Symfony\Component\DependencyInjection\ContainerInterface
*/
private $container;
/**
* @InjectParams({"container" = @Inject("service_container")})
*
*/
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
/**
* @Observe("kernel.request", priority = 255)
*/
public function onKernelRequest(GetResponseEvent $event)
{
$context = $this->container->get('security.context');
var_dump($context->getToken()); die();
}
}
Run Code Online (Sandbox Code Playgroud)
我认为我的安全设置工作正常.那可能是什么问题呢?
secured_area:
pattern: ^/app/
switch_user: true
form_login:
check_path: /app/login_check
login_path: /app/login
default_target_path: /app/dashboard
always_use_default_target_path: true
logout:
path: /demo/secured/logout # TODO
target: /demo/ …Run Code Online (Sandbox Code Playgroud) 选择具有
data-toggle属性的所有元素,无论值是否为(href="#myModal"或data-target="#myModal").
我用过这个:
$('[data-toggle][href="#myModal"], [data-toggle][data-target="#myModal"]');
Run Code Online (Sandbox Code Playgroud)
不干.有没有简单的方法或功能来做到这一点?
使用Symfony 2.1.3-dev和Doctrine 2.3
我正在尝试构建一个表单,为用户提供多个选项来过滤返回的数据集(Entity\EngineCodes).的形式由1个文本输入字段(的id)和3个选择字段(module,type,status).我试图使用Symfony2 entityform_type为EngineCodes实体中的3个选择字段生成值.
因为我想要使用任何3个选择字段的组合来过滤表格.基于2.1文档,我决定创建一个FormType(EngineCodesFilterType)并设置三个表单字段以entity使用query_builder语句键入,以便为每个字段返回一组唯一值.
不幸的是,我收到了跟随错误,我不确定为什么它返回一个数组而不是一个对象.
The form's view data is expected to be an instance of class
Vendor\IndexBundle\Entity\EngineCodes, but is a(n) array.
You can avoid this error by setting the "data_class" option
to null or by adding a view transformer that transforms a(n)
array to an instance of Vendor\IndexBundle\Entity\EngineCodes.
Run Code Online (Sandbox Code Playgroud)
如果我设置data_class为null,我收到此错误:
A "__toString()" method was not …Run Code Online (Sandbox Code Playgroud) 这是我的文件夹结构(的一部分):
使用r.js -o build.js以下配置运行优化器工作正常:
// main.js file
requirejs.config({
baseUrl: '../bower_components',
paths: {
'domready': 'domready/ready',
'jquery': 'jquery/jquery',
}
});
requirejs(['domready', 'jquery'], function (domReady, $) {
domReady(function () {
});
});
// build.js file
({
baseUrl: "bower_components",
name: "./almond/almond",
include: "./../public/main",
out: "build/main.js",
paths: {
'domready': 'domready/ready',
'jquery': 'jquery/jquery',
},
preserveLicenseComments: false
})
Run Code Online (Sandbox Code Playgroud)
但是,如果我删除它中的paths配置build.js不再有效:
跟踪以下内容的依赖项:./ golden/almond错误:ENOENT,没有这样的文件或目录'C:\ Users\Marco\Documents\Progetti \nodejs-opt\bower_components\domready.js'在模块树中:../ public /main
错误:错误:ENOENT,没有这样的文件或目录'C:\ Users\Marco\Documents\Progetti \nodejs-opt\bower_components\domready.js'在模块树中:../ public /main
Run Code Online (Sandbox Code Playgroud)at Object.fs.openSync (fs.js:427:18)
我想要干,避免两次添加依赖.这可能吗?
CREATE TABLE `discount_base` (
`id` varchar(12) COLLATE utf8_unicode_ci NOT NULL,
`amount` decimal(13,4) NOT NULL,
`description` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`family` varchar(4) COLLATE utf8_unicode_ci NOT NULL,
`customer_id` varchar(8) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `IDX_CUSTOMER` (`customer_id`),
KEY `IDX_FAMILY_CUSTOMER_AMOUNT` (`family`,`customer_id`,`amount`),
CONSTRAINT `FK_CUSTOMER` FOREIGN KEY (`customer_id`)
REFERENCES `customer` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Run Code Online (Sandbox Code Playgroud)
我添加了一个覆盖指数IDX_FAMILY_CUSTOMER_AMOUNT上family,customer_id而且amount因为大部分时间我用下面的查询:
SELECT amount FROM discount_base WHERE family = :family AND customer_id = :customer_id
Run Code Online (Sandbox Code Playgroud)
然而,使用EXPLAIN …
symfony ×6
javascript ×2
localization ×2
almond ×1
backbone.js ×1
datetime ×1
doctrine-orm ×1
events ×1
indexing ×1
intl ×1
jquery ×1
locale ×1
mysql ×1
optimization ×1
php ×1
r.js ×1
requirejs ×1
sql ×1
symfony-2.1 ×1
symfony-2.3 ×1
translation ×1
validation ×1