小编yce*_*uto的帖子

双问号(??运算符)在PHP中意味着什么

我正在深入研究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

php operator-keyword

129
推荐指数
3
解决办法
4万
查看次数

如何清除文件输入

下面是我的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)

现在我有"清除文件"按钮的原因是因为如果你点击按钮,它将清除文件输入中的任何内容.我如何对其进行编码,以便在单击"清除文件"按钮时实际清除文件输入?

jquery

60
推荐指数
6
解决办法
17万
查看次数

Symfony Flex:symfony.lock文件有什么作用?

安装后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以及为什么需要它?

php symfony symfony-flex symfony4

19
推荐指数
1
解决办法
6187
查看次数

如何在Symfony4结构的参数文件中检索环境变量?

我使用Symfony Flex进行了新的Symfony安装,新的骨架属于下一个Symfony 4目录结构.

我添加并配置了第一个第三方软件包:HWIOAuthBundle.该捆绑包用于通过Twitter使用两个秘密信息进行连接.

consumer_idconsumer_secretconfig/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

php environment-variables symfony symfony-flex symfony4

9
推荐指数
2
解决办法
1417
查看次数

Symfony CLI中的空转储()输出

我正在构建一个简单的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)

php command-line-interface symfony

8
推荐指数
1
解决办法
677
查看次数

如何在Symfony 4中覆盖第三方捆绑包的资源?

我使用Symfony Flex进行了新的Symfony安装,新的骨架属于下一个Symfony 4目录结构.接下来,将从外部包中覆盖一些资源,如模板,翻译等.

我试图为模板创建所有这些路径(开始),但没有任何作用:

  • templates/EasyAdminBundle/views/...
  • templates/Resources/EasyAdminBundle/views/...
  • app/Resources/... (只是旧结构的证明)

我应该在哪里放置我的资源文件来覆盖第三方捆绑资源?

php symfony symfony4

8
推荐指数
1
解决办法
1439
查看次数

使用reCaptcha测试表单提交的安全和标准方法是什么?

我有很多不同形式的观点,有些形式有reCaptcha保护,有些则没有.具有reCaptcha保护的表单是关键的(注册,登录,还原等),这就是为什么它们应该被测试.

我不想做的事:

  1. 添加任何debug,test这把验证码断标志(不安全?).
  2. 在每个单元测试和部署阶段评论或取消注释reCaptcha HTML-block.

使用reCaptcha测试表单的标准方法是什么?

phpunit unit-testing recaptcha symfony

8
推荐指数
1
解决办法
527
查看次数

Symfony 4 Composer 脚本

我刚刚安装了 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

symfony composer-php

8
推荐指数
2
解决办法
2501
查看次数

如何缩小 Symfony / Twig 生成的 HTML 代码以满足 Google PageSpeed Insight 的要求?

当使用 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

html minify symfony twig

7
推荐指数
1
解决办法
6291
查看次数

如何在Symfony2中"动态"禁用一个变换器验证错误

我有一个包含许多字段和验证组的表单,这些字段也包含一些视图数据转换器.

我需要部分抑制验证表单(基于提交的数据的组):

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)

php symfony symfony2-forms symfony-validator

6
推荐指数
1
解决办法
752
查看次数