我在 yii2 的基本项目中创建了模块,现在我想访问或使用该模块我的另一个项目/应用程序....
我怎样才能做到这一点。
请帮帮我。
要在不同的应用程序中使用模块,您需要 3 件事。
app
并且自动加载器必须知道如何从该命名空间加载类。(稍后会详细介绍)第 1 点和第 3 点几乎是不言自明的。如果不确定如何在配置中添加模块,请参阅 yii2 指南。
现在回到第二点。虽然将模块复制到第二个项目的天真方法会起作用,但它会将维护模块变成噩梦,因为每个更改都必须在模块的每个副本中完成。所以最好把模块的代码放在一个地方,让每个项目都可以使用。有多种方法可以做到这一点。
如果您愿意,您可以将您的模块转换为扩展,并按照M. Eriksson在评论中的建议,通过 packagist 将其公开。之后,您只需通过 composer 添加您的扩展作为任何其他依赖项。
如果您不想在 packagist 上发布您的模块,Composer 还允许您定义和使用私有存储库。有关更多详细信息,请参阅作曲家文档。
最简单的方法是将代码简单地放在项目之外的单独文件夹中。如果这样做,您必须确保项目中的自动加载器能够找到文件位置以加载类。有两种选择如何做到这一点。在任何情况下,您都希望避免与项目使用的名称空间发生冲突,这就是您需要使用不同名称空间的原因。
假设您已将模块文件放入文件夹/path/to/modules/myModule
,并且模块中的所有类都属于 namespace modules\myModule
。您必须确保您的网络服务器可以访问该文件夹并且可以在那里运行 php 脚本。
第一个选择是使用 Yii 的自动加载器。该自动加载器使用别名来查找类。如果您添加@modules
别名并将其指向/path/to/modules
文件夹,Yii 自动加载器将尝试从文件夹中的modules\*
命名空间中查找任何类/path/to/modules
。您可以在配置文件(web.php、console.php 或您使用的任何其他配置文件)中添加别名:
return [
// ...
'aliases' => [
'@modules' => '/path/to/modules',
// ... other aliases ...
],
];
第二个选项是使用项目的 composer.json 文件来设置由 composer 生成的自动加载器来加载你的类。
{
"autoload": {
"psr-4": {
"modules\\": "/path/to/modules"
}
}
}
您可以在作曲家的文档中找到有关此的更多信息。不要忘记composer dump-autoload
在 composer.json 文件中更改自动加载设置后运行以更新生成的自动加载器。