Symfony:最后如何在 v4-v5 上使用自定义核心 PHP 库?
Symfony: so finally how to use custom core PHP library on v4-v5?
所以主题就是问题。是的,我已经搜索过这个论坛并用谷歌搜索过。我所拥有的一切 - 无用的 Symfony 文档和强制转换,一些一般性建议,cli-s,没有任何特定案例。也许 yahoo 或 duckduck 可以提供更好的帮助?
每个人都在谈论 bundle,谈论创建它们的重要性,可能是因为在幕后 Symfony 正在推动用户远离自定义库,但实际上没有人解释如何开始使用 bundle - 如何开始调用它的方法。
不,我的库不是作曲家或任何包。不,库方法不 return Response 对象。不,我不是在处理作曲家或重新编译或 cli(我使用 Composercat)。不,我不会将库放到 github 或 packagist 以通过 composer 或其他方式加载它,因为它是私有库。
抱歉,情绪跑题了。
关于案例:我已将我的图书馆放入文件夹
src/lib/MyLibrary.php
我怀疑库 class 是自动加载的,因为如果我不使用它扩展控制器(如果我声明 class MyLibrary
而不是 class MyLibrary extends Controller
) - Symfony 吐出 "class name in use" 错误。
所以问题:在我的控制器中如何调用库方法?
$this->get('MyLibrary')
无效。
echo print_r($this)
也没有在此注册表中显示 MyLibrary。
看起来库文件已加载但未注册 and/or 已实例化。如果是这样,那么指向 Symfony 在哪里注册呢?
所以这个问题的大部分实际上是关于 php 如何管理 类。与 Symfony 无关。不过没关系。
首先最好将 project/src/lib 移动到 project/lib。 Symfony 在 src 目录中进行了一些扫描,您真的不希望将您的库混在其中。
所以:
# lib/MyLibrary.php
namespace Roman;
class MyLibrary
{
public function hello()
{
return 'hello';
}
}
请注意,我添加了一个名称空间(罗马)只是为了将您的代码与 Symfony 的代码区分开来。
现在您需要调整 composer.json 以允许 php 自动加载您的 类:
"autoload": {
"psr-4": {
"App\": "src/",
"Roman\": "lib/"
}
},
添加罗马线后,运行 "composer dump-autoload" 重新生成自动加载文件。
之后,这只是在您的应用程序中使用常规 php 的问题:
# src/Controller/DefaultController.php
namespace App\Controller;
use Roman\MyLibrary;
use Symfony\Component\HttpFoundation\Response;
class DefaultController
{
public function index()
{
$myLibrary = new MyLibrary();
$hello = $myLibrary->hello();
return new Response($hello);
}
}
这应该让你开始了。
所以主题就是问题。是的,我已经搜索过这个论坛并用谷歌搜索过。我所拥有的一切 - 无用的 Symfony 文档和强制转换,一些一般性建议,cli-s,没有任何特定案例。也许 yahoo 或 duckduck 可以提供更好的帮助?
每个人都在谈论 bundle,谈论创建它们的重要性,可能是因为在幕后 Symfony 正在推动用户远离自定义库,但实际上没有人解释如何开始使用 bundle - 如何开始调用它的方法。
不,我的库不是作曲家或任何包。不,库方法不 return Response 对象。不,我不是在处理作曲家或重新编译或 cli(我使用 Composercat)。不,我不会将库放到 github 或 packagist 以通过 composer 或其他方式加载它,因为它是私有库。
抱歉,情绪跑题了。
关于案例:我已将我的图书馆放入文件夹
src/lib/MyLibrary.php
我怀疑库 class 是自动加载的,因为如果我不使用它扩展控制器(如果我声明 class MyLibrary
而不是 class MyLibrary extends Controller
) - Symfony 吐出 "class name in use" 错误。
所以问题:在我的控制器中如何调用库方法?
$this->get('MyLibrary')
无效。
echo print_r($this)
也没有在此注册表中显示 MyLibrary。
看起来库文件已加载但未注册 and/or 已实例化。如果是这样,那么指向 Symfony 在哪里注册呢?
所以这个问题的大部分实际上是关于 php 如何管理 类。与 Symfony 无关。不过没关系。
首先最好将 project/src/lib 移动到 project/lib。 Symfony 在 src 目录中进行了一些扫描,您真的不希望将您的库混在其中。
所以:
# lib/MyLibrary.php
namespace Roman;
class MyLibrary
{
public function hello()
{
return 'hello';
}
}
请注意,我添加了一个名称空间(罗马)只是为了将您的代码与 Symfony 的代码区分开来。
现在您需要调整 composer.json 以允许 php 自动加载您的 类:
"autoload": {
"psr-4": {
"App\": "src/",
"Roman\": "lib/"
}
},
添加罗马线后,运行 "composer dump-autoload" 重新生成自动加载文件。
之后,这只是在您的应用程序中使用常规 php 的问题:
# src/Controller/DefaultController.php
namespace App\Controller;
use Roman\MyLibrary;
use Symfony\Component\HttpFoundation\Response;
class DefaultController
{
public function index()
{
$myLibrary = new MyLibrary();
$hello = $myLibrary->hello();
return new Response($hello);
}
}
这应该让你开始了。