以下是一个来自Symfony2网站的关于定义自定义服务(YAML表示法)的示例:
services:
newsletter_manager:
class: %newsletter_manager.class%
arguments: [@mailer, @templating]
Run Code Online (Sandbox Code Playgroud)
是否有一个默认的Symfony2服务对象的名单可以注入定制服务的参数(如@mailer,@templating,@doctrine)?
我知道它们来自Container(例如,每个Controller班级都有).我试图转储所有服务,但我正在寻找更详细的列表:
php app/console container:debug
logger container Symfony\Bridge\Monolog\Logger
mailer container Swift_Mailer
translator n/a alias for translator.default
...
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Symfony 2中实现自定义身份验证提供程序.我正在使用Fiddler发送测试请求并打印所有标头服务器端; 好吧,Authorization标题丢失了.
难道我做错了什么?
GET /RESTfulBackend/web/index.php HTTP/1.1
Authorization: FID 44CF9590006BF252F707:jZNOcbfWmD/
Host: localhost
User-Agent: Fiddler
Accept: 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
Run Code Online (Sandbox Code Playgroud)
Listener只打印标题并退出:
class HMACListener implements ListenerInterface
{
private $securityContext;
private $authenticationManager;
public function handle(GetResponseEvent $event)
{
$request = $event->getRequest();
print_r($request->headers->all());
die();
}
}
Run Code Online (Sandbox Code Playgroud)
响应缺少Authorization标题:
Array
(
[host] => Array
(
[0] => localhost
)
[user-agent] => Array
(
[0] => Fiddler
)
[accept] => Array
(
[0] => text/html,application/xhtml+xml,application/xml
)
[accept-language] => Array
(
[0] => it-it,it;q=0.8,en-us;q=0.5,en;q=0.3 …Run Code Online (Sandbox Code Playgroud) 这是FormEvents来自github上的Symfony2存储库的类.它与主要文章" 如何使用表单事件动态生成表单"相关联.
任何人都知道在流程中调用这些事件的确切时间?
namespace Symfony\Component\Form;
/**
* @author Bernhard Schussek <bernhard.schussek@symfony.com>
*/
final class FormEvents
{
const PRE_BIND = 'form.pre_bind';
const POST_BIND = 'form.post_bind';
const PRE_SET_DATA = 'form.pre_set_data';
const POST_SET_DATA = 'form.post_set_data';
const BIND_CLIENT_DATA = 'form.bind_client_data';
const BIND_NORM_DATA = 'form.bind_norm_data';
const SET_DATA = 'form.set_data';
}
Run Code Online (Sandbox Code Playgroud) 我正在使用Symfony2 国家/地区字段类型,它运行良好并且国家/地区名称已翻译.我将两位数的国家/地区代码存储在country我的实体列中.
如何显示完整的已翻译国家/地区名称?这是我将字段添加到表单的方式:
$builder
->add('country', 'country', array(
'label' => 'Paese', 'preferred_choices' => array('IT')
));
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器中:
$user = $this->getDoctrine()->getRepository('AcmeHelloBundle:User');
$countryCode = $user->getCountry();
$countryName = null; // Get translated country name from code
Run Code Online (Sandbox Code Playgroud)
或者在我的树枝模板中:
{# Output the country code and name #}
{{ user.country }}
{# translated country name from code #}
Run Code Online (Sandbox Code Playgroud) 如何显式打印CSRF字段而不是使用{{ form_rest(form) }}?
我需要这个,因为我将根据条件隐藏/显示一些字段,但是{{ form_rest(form) }}要打印所有剩余的字段(这是我想要避免的).
使用Symfony2 实体字段类型应指定property选项:
$builder->add('customers', 'entity', array(
'multiple' => true,
'class' => 'AcmeHelloBundle:Customer',
'property' => 'first',
));
Run Code Online (Sandbox Code Playgroud)
但有时这还不够:想想两个同名的客户,所以显示电子邮件(唯一)是强制性的.
另一种可能性是__toString()在模型中实现:
class Customer
{
public $first, $last, $email;
public function __toString()
{
return sprintf('%s %s (%s)', $this->first, $this->last, $this->email);
}
}
Run Code Online (Sandbox Code Playgroud)
后者的缺点是你被迫在所有形式中以相同的方式显示实体.
有没有其他方法可以使这更灵活?我的意思是像回调函数:
$builder->add('customers', 'entity', array(
'multiple' => true,
'class' => 'AcmeHelloBundle:Customer',
'property' => function($data) {
return sprintf('%s %s (%s)', $data->first, $data->last, $data->email);
},
));
Run Code Online (Sandbox Code Playgroud) 我有一个创建新的表单Customer.客户可能拥有手机号码.移动号码应该没有+或00用户可以键入的前缀.这可以通过以下方式轻松完成:
$customer->setMobile(preg_replace("/^(\+|00)/", '', $customer->getMobile()));
Run Code Online (Sandbox Code Playgroud)
放置此代码的最佳位置是哪个?
CustomerController调用实体管理器之前并保持实体.这真的是MVC模式中的控制器问题吗?SanitizeCustomerSubscriber和听取FormEvents:POST_BIND事件CustomerSanitizer服务还有其他想法吗?当然,我说的是一般的数据操作,手机号码只是一个例子:要消毒的字段可能不仅仅是一个.
如何检查服务器配置是否允许我设置如下选项:
ini_set('upload_max_filesize', '8M');
Run Code Online (Sandbox Code Playgroud)
在PHP脚本中?这是一个php.ini指令的列表,但我无法弄清楚如何在更改该值之前进行检查.
这是我的application-router.js文件,我Backbone.Router只用几条路线创建对象:
var App = App || {};
App.Router = Backbone.Router.extend({
routes : {
'' : 'showDashboard', // Not shown
'*other': 'showModalError'
},
defaultRoute : function(other) { $('#modal404').modal(); }
});
Run Code Online (Sandbox Code Playgroud)
在主javascript文件中,application.js我想以编程方式添加路由.我已尝试使用route()函数,但它不起作用,不添加路由.然而它将一个对象传递给"构造函数",但是它会覆盖已定义的路径:
// This works and overrides all defined routes in App.Router
var router = new App.Router({ routes : { '/test/me' : 'testRoute' } });
// This is not working
router.route(ExposeTranslation.get('customers.new.route'), 'newCustomer');
router.route('/test/me/again', 'testAgainRoute');
Run Code Online (Sandbox Code Playgroud)
实际上console.log(App.Router)表明:
routes Object { /test/me="testRoute"}
Run Code Online (Sandbox Code Playgroud)
我想我错过了一些我无法弄清楚的东西,我开始学习这一小块强大的javascript.
是否有基于分隔符将字符串拆分为块的功能?join过滤器的反面.
我的意思是explode在PHP中.我需要检查class参数是否包含给定的字符串:
{% macro nav_item(route, label, class, tooltip, placement) %}
{% spaceless %}
{% if 'icon-white' in class|explode(' ') %}
{% edif %}
{% endspaceless %}
{% endmacro %}
Run Code Online (Sandbox Code Playgroud) symfony ×8
forms ×2
php ×2
twig ×2
backbone.js ×1
fiddler ×1
http ×1
http-headers ×1
routing ×1