如何使用依赖注入容器将Yii composer插件连接到Yii数据库?

时间:2016-07-20 06:31:11

标签: dependency-injection yii2 composer-plugin

致电所有Yii和Composer大师!我需要你的帮助:))

我是Yii的新手,我正在为Yii2项目创建一个作曲家插件,它需要依赖注入容器来完成这项工作。总结我的插件所做的是,一旦插件通过composer添加到项目中,我想创建一个数据库表。

我已经创建了一个还没有做任何事情的composer-plugin,可以成功地添加到项目的依赖项中。它具有安装composer插件所需的基本文件(如composer.json和Plugin.php)。当我添加一些代码时,我遇到了一些问题。

我的一个问题是我无法到达Yii的课程。当我尝试使用'Yii :: $ app'时出现此错误:

  

PHP致命错误:在......中找不到“Yii”类

所以我猜'使用Yii; '不起作用(?)

另一个问题是当我应用Yii2的documentation所需的片段时,我明白了:

  

PHP致命错误:未捕获TypeError:参数1传递给   Experiment \ Plugin :: __ construct()必须是。的实例   yii \ db \ Connection,没有给出

我做错了还是我错过了什么?我想知道如何解决这个问题,以及正确的做Yii作曲家插件的方法。如何将作曲家插件连接到Yii数据库(任何类型的数据库)?

以下代码可能有所帮助:

composer.json

{
    "name": "rencamp/experiment-component",
    "description": "This is a test package.",
    "type": "composer-plugin",
    "require": {
        "yiisoft/yii2": "^2.0",
        "composer-plugin-api": "^1.0"
    },
    "autoload": {
        "psr-4": {
            "Experiment\\": "src"
        }
    },
    "extra": {
        "class": "Experiment\\Plugin"
    },
    "minimum-stability": "dev"
}

Plugin.php (这是在'src'文件夹中)

<?php
namespace Experiment;

use Composer\Composer;
use Composer\IO\IOInterface;
use Composer\Package\Link;
use Composer\Plugin\PluginInterface;

use Yii;
use yii\base\Component;
use yii\base\Object;
use yii\db\Connection;

class Plugin extends Object implements PluginInterface
{

  public function __construct(Connection $db, $config = [])
  {
      $this->db = $db;
      parent::__construct($config);
  }

    /**
     * @param Composer $composer
     * @param IOInterface $io
     */
    public function activate(Composer $composer, IOInterface $io)
    {
        print_r("\n\rActivated.\n\r");
    }

    private function createTable()
    {
      print_r("create table here...\n\r");
    }
}

顺便说一下,这是packagistgithub

非常感谢你的帮助!

0 个答案:

没有答案