【问题标题】:require_once at symfonysymfony 的 require_once
【发布时间】:2017-04-13 01:09:29
【问题描述】:

我现在正在用 php + Symfony2 框架做东西,我有以下代码:

require_once("one_file.php");
require_once("another_file.php");

...等等。

问题是,如何“Symfonyze”这些不舒服的 require 语句,然后,如何将这些文件包含在 Symfony2 包中?

我们考虑了两种可能性:

  1. 将文件包含在 symfony 的/vendors 目录中,或者
  2. 将每个类作为服务包含在内。

【问题讨论】:

    标签: php symfony composer-php


    【解决方案1】:

    如果这些类驻留在包中,那么您可以使用如下: 假设您的包名称是 AcmeDemoBundle。将此文件放在 Acme/DemoBundle/Model/ 中

      //one_file.php
       namespace Acme/DemoBundle/Model;
       class one_file {
       ...........
       }
    

    要在控制器或任何其他文件中使用此文件:

    这里是 Acme/DemoBundle/Controller/UserController.php

       namespace Acme/DemoBundle/Controller   
       use Acme/DemoBundle/Model/one_file
        class UserController {
        public $one_file=new one_file();
        }
    

    从 php 5.3 开始,引入了命名空间。您可能应该在 php 文档中查看名称空间及其用途

    【讨论】:

    • 由于还没有公认的答案,我建议这个是正确的,因为它对我有用。
    • 工人!非常感谢,抱歉耽搁了
    【解决方案2】:

    您可以遵循 PSR-0 标准让自动加载器处理此问题。见https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.mdhttp://getcomposer.org/doc/04-schema.md#psr-0

    或者你可以保持你的文件原样,并告诉作曲家每次都需要它们:http://getcomposer.org/doc/04-schema.md#files

    【讨论】:

      【解决方案3】:

      你必须在你的 acme 文件夹中创建一个文件夹,比如 lib 将这些文件放在 lib 文件夹中,然后使用这个语句

      use Acme\DemoBundle\lib\Abc; // its your class name 
      

      【讨论】:

        【解决方案4】:

        您希望遵循这些其他答案,尤其是获得批准的答案,但如果您使用包含大量 PHP 文件的第三方库,则可以使用require_once(__DIR__.'/path/to/file.php') 作为快速修复。

        【讨论】:

        • 谢谢,这似乎是我唯一可行的解​​决方案。
        猜你喜欢
        • 1970-01-01
        • 2011-09-15
        • 2013-03-27
        • 1970-01-01
        • 1970-01-01
        • 2011-02-08
        • 2011-08-25
        • 2011-03-24
        • 2012-12-22
        相关资源
        最近更新 更多