我正在深入研究Symfony framwork(版本4)代码并发现代码的和平:
$env = $_SERVER['APP_ENV'] ?? 'dev';
Run Code Online (Sandbox Code Playgroud)
我不太确定这实际上是做什么但我想它扩展到类似的东西:
$env = $_SERVER['APP_ENV'] != null ? $_SERVER['APP_ENV'] : 'dev';
Run Code Online (Sandbox Code Playgroud)
或者可能:
$env = isset($_SERVER['APP_ENV']) ? $_SERVER['APP_ENV'] : 'dev';
Run Code Online (Sandbox Code Playgroud)
有人对这个问题有任何精确性吗?
编辑:
对于回答问题的所有人:谢谢所有标记我的问题的人都是否定的,因为已经存在类似的问题(PHP三元运算符vs null合并运算符):
确实,这两个问题非常相似.然而,每个人都很难想象"??" 被称为合并运算符.
否则我可以在官方文档上轻松找到它:
http://php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op
但是,对于那些不知道在php 7中添加了此功能的人来说,更有可能输入:
"php ?? operator"或"php double question mark operator"
这就是为什么我的问题具有附加价值的原因.
我请你,重新考虑你的负面反馈.谢谢
此致,Epixilog
下面是我的jquery代码的一部分,它显示文件输入和"清除文件"按钮.
var $imagefile = $('<input />').attr({
type: 'file',
name: 'imageFile',
class: 'imageFile'
});
$image.append($imagefile);
var $imageclear = $('<input />').attr({
type: 'button',
name: 'imageClear',
class: 'imageClear',
value: 'Clear File'
});
$image.append($imageclear);
Run Code Online (Sandbox Code Playgroud)
现在我有"清除文件"按钮的原因是因为如果你点击按钮,它将清除文件输入中的任何内容.我如何对其进行编码,以便在单击"清除文件"按钮时实际清除文件输入?
安装后symfony/serializer我发现我的symfony.lock文件发生了变化:
diff --git a/symfony.lock b/symfony.lock
index ba6e23f..bfc391e 100644
--- a/symfony.lock
+++ b/symfony.lock
@@ -301,5 +301,8 @@
},
"symfony/asset": {
"version": "v3.3.10"
+ },
+ "symfony/serializer": {
+ "version": "v3.3.13"
}
}
Run Code Online (Sandbox Code Playgroud)
根据我的理解,它是与Symfony Flex一起引入的,但它与它有什么不同composer.lock以及为什么需要它?
我使用Symfony Flex进行了新的Symfony安装,新的骨架属于下一个Symfony 4目录结构.
我添加并配置了第一个第三方软件包:HWIOAuthBundle.该捆绑包用于通过Twitter使用两个秘密信息进行连接.
consumer_id我consumer_secret在config/packages/hwi_oauth.yaml文件中声明我和我的.
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
twitter:
type: twitter
client_id: XXXXXMyIdXXXXX
client_secret: XXXXXMyTopSecretKeyXXXXX
Run Code Online (Sandbox Code Playgroud)
我的申请工作正常.但我无法在github上提交我的秘密!
我想要一个hwi_oauth.yaml像这样的文件:
hwi_oauth:
firewall_names: [secured_area]
resource_owners:
twitter:
type: twitter
client_id: '%twitter_consumer_id%'
client_secret: '%twitter_consumer_secret%'
Run Code Online (Sandbox Code Playgroud)
我阅读了有关新DotEnv包的Symfony4最佳实践.
使用环境变量虽然远非完美,但与我们目前的工作相比有很多好处.环境变量是管理依赖于环境的设置的更"标准"方式(例如,不需要管理parameters.yml.dist).
正如最佳实践中所建议的那样,我将这两行附加到.env文件:
TWITTER_CONSUMER_ID=XXXXXMyIdXXXXX
TWITTER_CONSUMER_SECRET=XXXXXMyTopSecretKeyXXXXX
Run Code Online (Sandbox Code Playgroud)
但是我遇到了这个错误:
您已请求不存在的参数"twitter_consumer_id".
我试着用%kernel.twitter_consumer_id%,%env.twitter_consumer_id%,%env(TWITTER_CONSUMER_ID)%没有更多的成功.
最后一个测试是返回此错误消息:
在渲染模板期间抛出了异常("未找到环境变量:"TWITTER_CONSUMER_ID".").
如何在参数文件中检索我的ENV变量hwi_oauth.yaml?
我正在构建一个简单的Symfony-shell脚本,以便在交互模式下测试我的Symfony应用程序:
# bin/app_dev_cli.php
require __DIR__.'/../app/autoload.php';
$kernel = new AppKernel('dev', true);
// Initialize bundles and container
$kernel->boot();
// Useful global vars
$container = $kernel->getContainer();
$doctrine = $container->get('doctrine');
$em = $doctrine->getManager();
Run Code Online (Sandbox Code Playgroud)
稍后,打开PHP 交互模式并包含以前的脚本我可以快速完成一些任务:
/path/to/symfony/project$ php -a
Interactive mode enabled
# Booting the Symfony-shell app
php > require 'bin/app_dev_cli.php';
# Check if one service has been registered successfully
php > dump( $container->has('some_service') );
# Test some service
php > dump( $container->get('some_service')->run($param) );
# Manage some entities and DB …Run Code Online (Sandbox Code Playgroud) 我有很多不同形式的观点,有些形式有reCaptcha保护,有些则没有.具有reCaptcha保护的表单是关键的(注册,登录,还原等),这就是为什么它们应该被测试.
我不想做的事:
debug,test这把验证码断标志(不安全?).使用reCaptcha测试表单的标准方法是什么?
我刚刚安装了 Symfony 4 项目,并在composer.json以下位置找到了这一部分:
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
"assets:install %PUBLIC_DIR%": "symfony-cmd"
},
"post-install-cmd": [
"@auto-scripts"
],
"post-update-cmd": [
"@auto-scripts"
],
...
Run Code Online (Sandbox Code Playgroud)
我发现auto-scriptsComposer 以某种方式处理了该部分:key 是一个命令bin/console,value 是一个命令“类型”(在这种情况下它是 Symfony 的)。由于它没有在 Composer 网站上记录,我认为它不是法律定义,但它有效,我的问题是 Composer 如何知道如何执行这些命令?Composer 怎么知道是什么symfony-cmd?
当使用 Google PageSpeed Insights 测试我的Symfony 2.8网页时,我收到警告,HTML 代码未缩小。
确实如此,虽然Assetic负责缩小所有CSS文件和JS脚本,但 HTML 代码本身相当脏。
Google 建议使用HTML Minifier,但由于这是一个 JavaScript 工具,它不能用作Twig扩展、过滤器等,可以吗?
该标签Twig的文档spaceless清楚地表明,该标签并不意味着缩小 HTML 等:
如果您想创建一个实际上删除 HTML 字符串中所有额外空格的标记,请注意,这并不像看起来那么容易(例如,考虑 textarea 或 pre 标记)。使用像Tidy这样的第三方库可能是一个更好的主意。
但我还是不明白如何Tidy集成到Twig模板等中。
Symfony那么,使用和创建缩小的 HTML 输出的最佳方法是什么Twig?
我有一个包含许多字段和验证组的表单,这些字段也包含一些视图数据转换器.
我需要部分抑制验证表单(基于提交的数据的组):
use AppBundle\Entity\Client;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'validation_groups' => function (FormInterface $form) {
$data = $form->getData();
if (Client::TYPE_PERSON == $data->getType()) {
return array('person');
}
return array('company');
},
));
}
Run Code Online (Sandbox Code Playgroud)
当您这样做时,表单仍将运行基本完整性检查(禁用验证)和来自变换器的验证错误,它们将被抛出(创建变换器).
使用POST_SUBMIT事件,并防止ValidationListener被称为(抑制表单验证):
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormEvents;
use Symfony\Component\Form\FormEvent;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) {
$event->stopPropagation();
}, 900); // Always set a higher priority than …Run Code Online (Sandbox Code Playgroud) symfony ×8
php ×6
symfony4 ×3
symfony-flex ×2
composer-php ×1
html ×1
jquery ×1
minify ×1
phpunit ×1
recaptcha ×1
twig ×1
unit-testing ×1