Composer在调用autoload.php后执行脚本
我正在编写一个composer包,在调用composer autoload.php以及访问其类和方法之前,需要执行一系列安全检查 我有一个composer.json文件:Composer在调用autoload.php后执行脚本,php,composer-php,autoload,Php,Composer Php,Autoload,我正在编写一个composer包,在调用composer autoload.php以及访问其类和方法之前,需要执行一系列安全检查 我有一个composer.json文件: { "name": "def-studio/logger", "description": "Def Studio logger system", "type": "library", "require": { "php": ">=5.3.0" }, "li
{
"name": "def-studio/logger",
"description": "Def Studio logger system",
"type": "library",
"require": {
"php": ">=5.3.0"
},
"license": "MIT",
"autoload": {
"psr-4": {
"DefStudio\\Logger\\": "src/"
}
}
}
调用/vendor/autoload.php
并加载主类DefStudio\Logger\Logger.php
后,每次加载类时,我都需要执行此方法:Logger::perform_checks()
实际上,我的代码是:
include_once './vendor/autoload.php';
use DefStudio\Logger\Logger;
Logger::perform_checks();
try{
//random messy code here
}catch(Exception $ex){
Logger::error("error!", $ex);
}
每次调用autoload.php
时,我都需要我的包调用Logger::perform_checks()
。。我希望在调用autoload.php
时自动调用它
调用
autoload.php
时,有没有办法自动执行php脚本?多亏了Dejv的评论,我在他链接的问题中找到了一个有用的答案:
更新了my package composer.json文件,以便添加要在自动加载时执行的脚本:
{
"name": "def-studio/logger",
"description": "Def Studio logger system",
"type": "library",
"require": {
"php": ">=5.3.0"
},
"license": "MIT",
"autoload": {
"psr-4": {
"DefStudio\\Logger\\": "src/"
}
"files": ["src/utilities/autoloader.php"]
}
}
在autoloader.php中,我执行了检查和启动代码
这样,当开发人员调用
include_once./vendor/autoload.php'
时,我的代码也会被执行如果您只想在加载库时对库进行自检,那么您最好使用composer内置程序。请注意,如果composer autoloader使用正确,保存该类的文件只加载一次,并且首次使用该类会触发包含。通过在autoload.php include之后立即调用Logger::perform_checks()
也可以手动触发DefStudio\Logger\Logger.php
文件的include。你有没有想过在Logger
类实例化时触发检查?@devv,可能我对我的问题解释得很糟糕:我不想手动调用Logger::perform_checks()
,因为我不知道使用包的开发人员是否会记得这样做。。。您在我的代码中看到的是实际的包工作方式,但我希望在autoload.php之后删除Logger::perform_checks()
,并在类加载时自动触发Logger::perform_checks()
,以确保执行我的检查。在这种情况下,我会将检查放入Logger
类的一个私有方法中,并在Logger的构造()的最后一行调用此方法。这样,每次有人实例化该类时,您的检查都会运行,并且只要对象是不可变的,您就可以保存性能,这应该是记录类的情况。我明白了。因此,在这种情况下,我建议进行设置,其中将包括vendor/composer/autoload.*.php
文件,这些文件带有文件的关联数组,以便在您的数据库中进行类查找。这样,您将能够在自动加载期间合并perform_checks()
函数触发器。