我正在为php创建请求处理程序,它将请求发送到服务器上的特定文件。我有一个.htaccess
文件,该文件将每个请求路由到DOCUMENT_ROOT/Server/handleRequest.php
,然后处理那里的其他所有内容。为了使此工作有效,我将.htaccess
文件和Server
文件夹复制到我的网站的根文件夹中。
我成功地让作曲家将项目安装到vendor/JakarCo/PHP-Request-Handler
下的供应商目录中。我希望将所有文件(至少是.htaccess
文件)直接安装到站点的文档根文件夹(在供应商文件夹上方一层)。
我正在尝试使用oomphinc/composer-installers-extender
设置自定义路径,但该路径无法正常工作,我不知道该如何解决。
请求处理程序中的composer.json
是
{
"name": "JakarCo/PHP-Request-Handler",
"description": "php request handler",
"type": "library",
"license": "proprietary",
"require": {
"php": "^5.3.6 || ^7.0",
"oomphinc/composer-installers-extender": "@dev"
},
"extra": {
"installer-types": ["library"],
"installer-paths": {
"my/path/": ["JakarCo/PHP-Request-Handler/"],
"path/to/libraries/JakarCo/": ["type:library"]
}
}
}
包含请求处理程序的项目的composer.json
是:
{
"repositories": [
{
"url": "https://github.com/JakarCo/PHP-Request-Handler",
"type": "vcs"
}
],
"require": {
"JakarCo/PHP-Request-Handler": "dev-master"
}
}
当我从站点的根文件夹运行composer update
时,它运行成功(现在没有任何更改)。因此,我删除了vendor文件夹和composer.lock文件并运行composer install
,并成功安装了三个文件,分别是composer / installer,oomphinc和我的。但是,当vendor/JakarCo/PHP-Request-Handler
文件夹和Server
文件需要进入站点的根文件夹时,我的工作仍会进入.htaccess
。
我怀疑我的问题出在installer-paths
上,但我不知道应该怎么做。此外,我可能不应该在oomphinc版本中使用@dev
,但是我不知道还要输入什么。
我对PHP很有经验,但是非常不实际,对使用composer和git还是陌生的。
答案 0 :(得分:0)
更新
事实证明这很糟糕。非常糟糕请求处理程序项目中的composer.json覆盖了我用来包含它的composer.json文件。
-
我使用https://getcomposer.org/doc/articles/custom-installers.md作为指南编写了自己的安装程序,只是将其粘贴粘贴。
重要说明:我正在工作的网站的composer.json需要一个指向请求处理程序的指针和一个指向请求处理程序安装程序的指针,如下所示。我试图将指向安装程序的指针放在请求处理程序项目中,但后来我读到repositories
部分仅由根编辑器读取。即,您在其中调用composer.json
的工作目录中的composer install/composer update
文件。或者,可以将安装程序项目添加到packagist中,然后Request Handler项目将能够直接要求它。
我很难让安装程序开始工作。这是因为在安装程序中传递给$packageType
的{{1}}是小写的,并且我指定的类型包括大写,因此supports()
变成了`return $ packageType == strtolower('JakarCo-请求安装程序”)。
我遇到的另一个问题是作曲家告诉我,当我执行return $packageType === 'JakarCo-request-installer
时,'getInstallPath'返回的目录名称不能为空。我更改为return '/'
,但仍然遇到问题。我先进行了return ./
然后composer clear-cache
然后rm -rf vendor
然后重新运行rm composer.lock
,现在它可以正常工作了。
这可能会更好,但是现在我只需要基本功能。稍后,我将提高代码质量。我是作曲家的新手,这实在令人不知所措,我发现文档难以理解。
composer install
因此,必须在站点项目中定义存储库。在Request Handler项目中定义存储库无济于事,然后找不到Request-handler-installer,因为composer不会递归起作用,除非您的项目位于packagist上,在这种情况下,您不定义存储库。烦人,但可行。