如何使用 Composer 从本地存储库加载 php 类?
How to use Composer to load php classes from local repository?
我是 Php 和 composer 的新手,我想使用 composer 将 Php class 访问到另一个模块,这是我的基本项目结构(两个模块 common 和 worker )
index.php
TestLocalRepository
--/Souce Files
--/common
--/vendor
--/canvass
--/test
--test.php
--/composer
--autoload.php
--composer.json
--/worker
--/vendor
--/composer
composer.json
temocaller.php
--index.php
common/vendor/canvass/test.php
<?php
namespace test;
class test {
//put your code here
function __construct() {
echo "hello";
}
}
?>
common/composer.json
{
"name":"canvass/test",
"type":"package",
"version": "1.0.0"
}
worker/composer.json
{
"autoload": {
"psr-4": {
"test":"../common/vendor/canvass"
}
}
}
worker/tempcaller.php
<?php
require_once dirname(__FILE__) . '../vendor/autoload.php';
use test;
class tempcaller {
//put your code here
function __construct() {
echo "tempcaller";
$obj = new test();
}
}
$t = new tempcaller();
?>
我也无法使用 psr-0 或存储库执行此操作,有什么方法可以执行此操作吗?
您在这里展示的是一个项目 TestLocalRepository
,它由两个单独的 Composer 项目组成,common
和 worker
在 Source
文件夹中,每个项目有一个 composer.json 文件和他们自己的供应商文件夹。
我认为你的项目结构不是最优的。
在我看来,您可以将这两个项目放在主项目的 vendor 文件夹中,而不是在源文件夹中。我的建议是使用一个项目 TestLocalRepository
并包括模块 common
和 worker
作为该项目的依赖项(在您的 composer.json
中)。
你会得到这样的结构:
TestLocalRepository
- composer.json
+- src
- index.php
+- vendor
- autoload.php
+- common
+- worker
- temocaller.php
现在:在 composer update
上,将提取依赖项 common 和 worker 并将其放入 vendor 文件夹中,然后将生成自动加载。
然后,在您的 src/index.php
中,您只需包含 require 'vendor/autoload.php';
和 $t = new test/temocaller();
;
如果这不是您想要的,那么您仍然可以使用 Composer Autoloader
并为其添加 类 的自定义位置。
在您的 index.php 中:首先需要自动加载器,然后将文件夹添加到自动加载 类 中,如下所示:
$loader = require 'vendor/autoload.php';
$loader->add('SomeWhere\Test\', __DIR__);
或者只是将路径添加到 TestLocalRepository 中的 composer.json
。
我是 Php 和 composer 的新手,我想使用 composer 将 Php class 访问到另一个模块,这是我的基本项目结构(两个模块 common 和 worker ) index.php
TestLocalRepository
--/Souce Files
--/common
--/vendor
--/canvass
--/test
--test.php
--/composer
--autoload.php
--composer.json
--/worker
--/vendor
--/composer
composer.json
temocaller.php
--index.php
common/vendor/canvass/test.php
<?php
namespace test;
class test {
//put your code here
function __construct() {
echo "hello";
}
}
?>
common/composer.json
{
"name":"canvass/test",
"type":"package",
"version": "1.0.0"
}
worker/composer.json
{
"autoload": {
"psr-4": {
"test":"../common/vendor/canvass"
}
}
}
worker/tempcaller.php
<?php
require_once dirname(__FILE__) . '../vendor/autoload.php';
use test;
class tempcaller {
//put your code here
function __construct() {
echo "tempcaller";
$obj = new test();
}
}
$t = new tempcaller();
?>
我也无法使用 psr-0 或存储库执行此操作,有什么方法可以执行此操作吗?
您在这里展示的是一个项目 TestLocalRepository
,它由两个单独的 Composer 项目组成,common
和 worker
在 Source
文件夹中,每个项目有一个 composer.json 文件和他们自己的供应商文件夹。
我认为你的项目结构不是最优的。
在我看来,您可以将这两个项目放在主项目的 vendor 文件夹中,而不是在源文件夹中。我的建议是使用一个项目 TestLocalRepository
并包括模块 common
和 worker
作为该项目的依赖项(在您的 composer.json
中)。
你会得到这样的结构:
TestLocalRepository
- composer.json
+- src
- index.php
+- vendor
- autoload.php
+- common
+- worker
- temocaller.php
现在:在 composer update
上,将提取依赖项 common 和 worker 并将其放入 vendor 文件夹中,然后将生成自动加载。
然后,在您的 src/index.php
中,您只需包含 require 'vendor/autoload.php';
和 $t = new test/temocaller();
;
如果这不是您想要的,那么您仍然可以使用 Composer Autoloader 并为其添加 类 的自定义位置。 在您的 index.php 中:首先需要自动加载器,然后将文件夹添加到自动加载 类 中,如下所示:
$loader = require 'vendor/autoload.php';
$loader->add('SomeWhere\Test\', __DIR__);
或者只是将路径添加到 TestLocalRepository 中的 composer.json
。