如何将框架注入自定义类?

时间:2016-03-18 18:36:49

标签: php rest registry flightphp

我目前正在使用FlightPHP框架开发一个应用程序,并想知道如何将FlightPHP注入到我的自定义类中,以便我能够使用我已注入其中的特定类的依赖容器。

Flight::log()->function("test");

我试图将Flight注入我的数据库类构造函数,以便我能够使用先前注入Flight依赖项容器的日志函数。

"记录器"在Flight实例" Flight::register('log', 'Monolog\Logger', ['app'], function($log) { return $log->pushHandler(new StreamHandler('app.log')); }); class DB{ function __construct(Monolog\Logger $engine){ #var_dump($engine); $engine->addInfo("injected"); // works } } Flight::register('database', 'DB', array(Flight::log()), function($db) { return $db; }); Flight::database(); "下使用时,它在index.php中工作,但是当我尝试在另一个范围(在Database类中)使用它时,它不允许我在" Flight"。

的背景下使用它

更新

userWorkouts: [
  {
    title: '3 Split',
    id: 1,
    workoutImg: '',
    workoutSessions: [{
     {
        workoutSessionName: 'Monday',
        workoutExerciseList: [{
          1: {
            exerciseName: "Pull Ups",
            exerciseSets: {
              1: 20,
              2: 12,
              3: 8
            }
          },
          2: {
            exerciseName: "Pull Ups",
            exerciseSets: {
              1: 20,
              2: 12,
              3: 8
            }
          }
        }
      }
      ]
    }
  },
  {
    title: 'Kraftausdauer Teil 1',
    id: 2,
    workoutImg: ''
  },
  {
    title: 'Kraftausdauer Teil 2',
    id: 3,
    workoutImg: ''
  },
  {
    title: '7 Minuten Training',
    id: 4,
    workoutImg: ''
  },
  {
    title: 'Workout Zuhause',
    id: 5,
    workoutImg: ''
  }
]

使用正确吗?

1 个答案:

答案 0 :(得分:0)

您可以在\Flight\Engine方法的第三个参数数组中传递register的实例,以便在您的数据库控制器中传递框架实例。 \Flight\Engine不使用接口,你猜你将代码与框架实现耦合。在这种情况下,您可以在任何地方使用Flight::app()来获取框架实例。

<?php error_reporting(E_ALL);
require 'vendor/autoload.php';


class DB
{
    function __construct(\Flight\Engine $engine)
    {
        var_dump($engine->get('connectionString'));
    }
}

Flight::set('connectionString', 'mssql');
Flight::register('database', 'DB', array(Flight::app()), function($db) {
    return $db;
});

Flight::database();

看起来Flight没有依赖注入容器这样的概念。您必须明确指定参数值。

更新

通过执行此['app'],您将字符串注入Monolog\Logger的构造函数中。这一行return $log->pushHandler(new StreamHandler('app.log'));会引发错误。

仔细阅读http://flightphp.com/learn