小编Dan*_*ler的帖子

Symfony 手动连接参数 - “参数”与“绑定”

我试图弄清楚如何手动注入参数DefaultController(没有自动装配)。我发现有两种方法可以实现这一目标。

我可以使用arguments

services:
    _defaults:
        autowire: false
        autoconfigure: true
        public: true

    App\Service\SomeService: ~

    App\Controller\DefaultController:
        arguments:                                    #!
            $service: '@App\Service\SomeService'
            $scalar: 22
Run Code Online (Sandbox Code Playgroud)

与此同时,我可以使用bind密钥:

services:
    _defaults:
        autowire: false
        autoconfigure: true
        public: true

    App\Service\SomeService: ~

    App\Controller\DefaultController:
        bind:                                         #!
            $service: '@App\Service\SomeService'
            $scalar: 22
Run Code Online (Sandbox Code Playgroud)

我的控制器:

class DefaultController extends Controller
{
    public function __construct($service, $scalar)
    {
        var_dump(get_class($service), $scalar);
    }
...
Run Code Online (Sandbox Code Playgroud)

这两个选项产生相同的输出:

string(23) "App\Service\SomeService" int(22)

那么究竟是什么这两个配置项之间的差异argumentsbind,他们做同样的事情?

php symfony symfony4

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

PHP 全局安装包:apt-get vs composer

我发现有两个选项可以在 Linux (Ubuntu 16.04) 中全局安装 PHP 包:

  1. 使用composer

    composer global require symfony/finder
    
    Run Code Online (Sandbox Code Playgroud)

    包裹将位于 ~/.config/composer/vendor/

    在此处输入图片说明

  2. 使用apt-get

    apt-get install php-symfony-finder
    
    Run Code Online (Sandbox Code Playgroud)

    包裹将位于 /usr/share/php/

    在此处输入图片说明

    此目录/usr/share/php/也在默认 PHP 中include_path(我有 PHP 7.2)

    在此处输入图片说明


我有几个问题:

为什么我要全局安装包?

我知道全局安装 php 工具很有用,比如phpunit- 它有二进制文件,它允许你在任何地方运行测试,所以你不必在每个项目中安装它。但是symfony/finder例如呢?全局安装的这个包有什么特殊用途?

1 和 2 选项有什么区别?

它有什么不同的用例或不同的效果吗?

php linux apt-get symfony composer-php

3
推荐指数
1
解决办法
999
查看次数

标签 统计

php ×2

symfony ×2

apt-get ×1

composer-php ×1

linux ×1

symfony4 ×1