Php 如何将框架注入自定义类?
我目前正在用FlightPHP框架开发一个应用程序,想知道如何将FlightPHP注入到自定义类中,以便能够使用注入到其依赖项容器中的特定类Php 如何将框架注入自定义类?,php,rest,registry,flightphp,Php,Rest,Registry,Flightphp,我目前正在用FlightPHP框架开发一个应用程序,想知道如何将FlightPHP注入到自定义类中,以便能够使用注入到其依赖项容器中的特定类 use Flight; use Logger; class DB{ public function __construct(...){ $this->app = $app; // Flight:: instance } public function doStuff($stuff){
use Flight;
use Logger;
class DB{
public function __construct(...){
$this->app = $app; // Flight:: instance
}
public function doStuff($stuff){
return $this->app->log()->function($stuff);
}
}
Flight::register('log', 'Logger', ['app'], function($log) {
return $log->pushHandler(new StreamHandler('app.log'));
});
Flight::register('database', 'DB', array($data), function($db) {
return $db;
});
我正试图将Flight注入到我的数据库类构造函数中,以便能够使用先前注入Flight依赖项容器的log函数
当在Flight实例“Flight::log()->函数(“test”);
”下使用时,“Logger”在index.php中工作,但是当我尝试在另一个作用域(数据库类内)中使用它时,它不允许我在“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();
用法是否正确?您可以在
register
方法的第三个参数数组中传递\Flight\Engine
的实例,以传递数据库控制器中的框架实例<代码>\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();
那么您是说您无法在DB构造函数中接收/注入Flight实例?那些……下面藏着什么?我不确定如何将Flight传递到DB构造函数中,以便我的自定义类(DB)能够利用我注入Flight依赖项容器中的其他类。我想这是我试图实现的正确方向,对此做了一些调整,但不确定我在构造函数和寄存器数组中是否正确,我在主帖子中添加了我的版本。我更新了我的答案。看起来没问题,但Logger真的需要这个字符串“app”吗?是的,Logger需要在其构造函数中包含一个参数,即当前日志配置文件的名称。