在 PHP Docker 容器/phpbrew 中为 PHP 5.3.10 获取 Symfony Doctrine 实体管理器
Getting Symfony Doctrine Entity Manager within PHP Docker container / phpbrew for PHP 5.3.10
我正在尝试 运行 在 Docker 下使用 PHP 5.3.10 的 Symfony 命令。当我到达像
这样的行时
class Data{
public function prepareData(){
echo 'before getContainer';
$em = $this->getContainer()->get('doctrine.orm.entity_manager')->getConnection();
echo 'after getContainer';
}
}
它默默地失败了。
设置容器的docker命令是
docker run --network="host" -t -i -p 80:80 -v /srv/www/live/:/srv/www/live/ -v /var/run/mysqld/mysqld.sock:/var/run/mysqld/mysqld.sock bylexus/apache-php53 /bin/bash
当在 Docker 容器中时,我安装 mysql 然后可以登录并查看本地系统上存在的数据库。
Docker 容器内的 Symfony 命令 I 运行 就像
php app/console mytask:preparedata
来自
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
class PrepareDataCommand extends Command
{
protected function configure()
{
parent::configure();
$this->setName('mytask:preparedata');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->getHelper('Data')->prepareData();
}
}
执行prepareData
函数。 'after getContainer' 从不回显,只有 'before getContainer'。日志中没有任何内容,Apache、MySQL 或 Symfony。
您是否知道如何调试它或如何像在 Docker 外部一样获取容器?
更新
我现在已经使用 phpbrew 对此进行了测试。它适用于 PHP 版本 5.6.30,但不适用于所需的 PHP 版本 5.3.10(与上面相同的 $em = $this->getContainer
行停止)。奇怪的是,它也不适用于 phpbrew 中的 PHP 7.0.3。现在是 PHP 版本的 Symfony 或 Doctrine 相关问题吗?
我尝试了一些其他的 Symfony CLI 命令并注意到有时在通过 composer 安装的 Doctrine 供应商存储库中会出现致命错误。经检查,这是使用 PHP 5.4 语法(方括号)初始化数组的地方。所以当然这在 5.3 容器中是行不通的。所以我降级了 doctrine/cache
、doctrine/common
和 doctrine/orm
以及现在的命令 运行.
我正在尝试 运行 在 Docker 下使用 PHP 5.3.10 的 Symfony 命令。当我到达像
这样的行时class Data{
public function prepareData(){
echo 'before getContainer';
$em = $this->getContainer()->get('doctrine.orm.entity_manager')->getConnection();
echo 'after getContainer';
}
}
它默默地失败了。
设置容器的docker命令是
docker run --network="host" -t -i -p 80:80 -v /srv/www/live/:/srv/www/live/ -v /var/run/mysqld/mysqld.sock:/var/run/mysqld/mysqld.sock bylexus/apache-php53 /bin/bash
当在 Docker 容器中时,我安装 mysql 然后可以登录并查看本地系统上存在的数据库。
Docker 容器内的 Symfony 命令 I 运行 就像
php app/console mytask:preparedata
来自
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Input\InputArgument;
class PrepareDataCommand extends Command
{
protected function configure()
{
parent::configure();
$this->setName('mytask:preparedata');
}
protected function execute(InputInterface $input, OutputInterface $output)
{
$this->getHelper('Data')->prepareData();
}
}
执行prepareData
函数。 'after getContainer' 从不回显,只有 'before getContainer'。日志中没有任何内容,Apache、MySQL 或 Symfony。
您是否知道如何调试它或如何像在 Docker 外部一样获取容器?
更新
我现在已经使用 phpbrew 对此进行了测试。它适用于 PHP 版本 5.6.30,但不适用于所需的 PHP 版本 5.3.10(与上面相同的 $em = $this->getContainer
行停止)。奇怪的是,它也不适用于 phpbrew 中的 PHP 7.0.3。现在是 PHP 版本的 Symfony 或 Doctrine 相关问题吗?
我尝试了一些其他的 Symfony CLI 命令并注意到有时在通过 composer 安装的 Doctrine 供应商存储库中会出现致命错误。经检查,这是使用 PHP 5.4 语法(方括号)初始化数组的地方。所以当然这在 5.3 容器中是行不通的。所以我降级了 doctrine/cache
、doctrine/common
和 doctrine/orm
以及现在的命令 运行.