我有一个Symfony bundle,需要使用自定义类。这个类不必在整个网站中都可访问,只需在此bundle的控制器中使用即可。
我已经看到了一些与vendors相关的解决方案,但这对我的情况来说过于繁琐,也不是必需的。
有没有更简单的解决方案?
这就是命名空间的作用。
来自php.net:
什么是命名空间?在最广泛的定义中,命名空间是一种封装项目的方法。
简单地说,只需在你的自定义类顶部包含你的命名空间。
src/Acme/DemoBundle/Model/MyClass.php
<?php
namespace Acme\DemoBundle\Model;
class MyClass { // ...
并将其用于您的控制器:
src/Acme/SomeOtherBundle/Controller/DefaultController.php
<?php
namespace Acme\SomeOtherBundle\Controller;
// ...
use Acme\DemoBundle\Model\MyClass; # can be used in any class in any bundle
// ...
class DefaultController extends Controller { // ...
.php
不是必需的,因为src/
下的每个文件都会自动加载。 - Emii KhaosAPI
的文件夹中呢?如果您计划拥有多个API“类别”,可以使用API/Weather
。实际位置可能是src/DLS/EphemerideBundle/API/Weather.php
这样的。 - Carrie Kendallgenerate:bundle
控制台命令,则可以查看正确命名空间的生成示例。如果需要更多有关如何使用它们的示例,还可以查看您的供应商文件。 - Carrie Kendall类必须在Acme\Bundle\Model
命名空间和文件夹中创建,而不是\Class
!谁说的?!
// ../src/Acme/Bundle/Model/Utility.php
<?php namespace Acme\Bundle\Model;
class Utility:
..
在控制器中使用:
<?php ..
use Acme\Bundle\Model\Utility;
$x = new Utility(); // FINE!:)
文件名称(Utility.php
)必须与类名相同。