php - Symfony 类加载器 - 用法?没有实际使用的例子

标签 php symfony

我一直在使用 Symfony 类加载器(阅读其他内容,概念并开始实现)。

我读过 http://symfony.com/doc/current/components/class_loader.html还有 我已经更改了目录结构以适应所有情况。这是一个失败的小源代码:

文件名:test.php,目录:C:/test/BE/src/main.php

   <?php
    define('BASE_DIR','/../..');

    echo BASE_DIR.'/BE/libs/symphony/component/ClassLoader/2.1.0/UniversalClassLoader.php';
    require_once BASE_DIR.'/BE/libs/symphony/component/ClassLoader/2.1.0/UniversalClassLoader.php';

    use Symfony\Component\ClassLoader\UniversalClassLoader;

    $loader = new UniversalClassLoader();
    $loader->registerNamespace('App\Location\Location', 'Location/Location');

     // You can search the include_path as a last resort.
    $loader->useIncludePath(true);    
    $loader->register();
    use App\Location\Location;
    new App\Location\Location(); //Fatal error: Class 'App\Location\Location' not found in C:/test/BE/src/main.php

文件名:Location.php,目录:C:/test/BE/src/Location/Location.php

namespace App\Location;

class Location{
    private $lat;
    private $lng;
}

最佳答案

按如下方式注册您的命名空间:

$loader->registerNamespace('App\Location\Location', 'Location/Location');

自动加载器将在 Location/Location/App/Location/Location.php 文件中查找 App\Location\Location 类。请注意,文件/目录名称区分大小写。

registerNamespace() 的第一个参数是命名空间或命名空间的部分。第二个参数是 PSR-0 兼容库的路径。这意味着该路径内的目录结构应遵循 PSR-0 标准。在计算给定 namespace 的路径时,使用此路径。

如果你想保留你当前的目录结构,下面的代码应该适合你:

$loader->registerNamespace('App', __DIR__);

我宁愿将您的源代码放在一个公共(public)目录中,例如 src:

src/
  App/
    Location/
        Location.php

然后注册命名空间如下:

$loader->registerNamespace('App', 'src');

通过这样做,您只是告诉自动加载器它应该在 src 文件夹中查找 App 命名空间类。请注意,它适用于 App 命名空间中的每个类(遵循 PSR-0)。

前段时间我写了一篇关于 Symfony 自动加载器的博文。您可能会发现它有帮助:Autoloading classes in an any PHP project with Symfony2 ClassLoader component

由于您计划使用 Pimple 和一些 Symfony 组件,请查看 Silex microframework .可能是您需要实现的东西。

关于php - Symfony 类加载器 - 用法?没有实际使用的例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10371073/

相关文章:

docker - 在 Symfony 中执行 RabbitMQ 消费者时出现 "Error reading data"

php - Laravel blade文件转word文档

php - 如何从mysql记录中返回php代码?

PHP 数组多重排序

symfony - "Remember me"使用自定义用户提供程序、用户实体等时测试失败

symfony - Varnish panic -废弃的原木(vsl)

nginx - 无法从 Nginx php - 基于 fpm 的 dedi 发送电子邮件?

php - XSS - 哪些 HTML 标签和属性可以触发 Javascript 事件?

symfony - 您可以在同一实体的不同索引中定义两个或多个类型吗?

symfony - preUpdate() sibling 管理到树 : how to break ->persist() recursion?