我目前正在使用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: ''
}
]
使用正确吗?
答案 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'));
会引发错误。