【问题标题】:Symfony - load custom global functionsSymfony - 加载自定义全局函数
【发布时间】:2016-04-05 15:28:36
【问题描述】:

我有一个文件,其中包含一些函数(一些扩展的 polyfills),没有命名空间,应该在全局范围内加载和访问。

问题是将这个文件放在哪里(现在它在“/src/AppBundle”目录中)以及如何在 Symfony 中加载它?也许是一些最佳实践之类的。

文件示例:

<?php

// functions.php

define('CONSTANT_NAME', 'constant_value');

function doSomething()
{
}

更新:一些函数也应该只在“dev”环境中加载(在一个单独的文件中)。也许在 app_dev.php 中添加“include_once”?

【问题讨论】:

    标签: php function symfony load global


    【解决方案1】:

    我会把它放在/src 文件夹中,也许是/src/functions.php - 你可以根据自己的喜好决定。 要加载它,您可以更改您的composer.json 并将files 添加到您的autoload 配置中,然后运行composer update

    "autoload": {
        "files": ["src/functions.php"]
    }
    

    所以每个请求都需要functions.php

    【讨论】:

    • 谢谢。您能否针对仅“开发”环境需要此功能的情况提出解决方案?将“include_once”放入“web/app_dev.php”或一些更“智能”的解决方案?
    • 我认为在 web/app_dev.php 中要求它已经足够了 - require(__DIR__.'/../src/yourfile.php'); - 你也可以在你的 app/AppKernel.php 中包含它,但这只是一个偏好
    • @alex,如果您想要一个可重复使用的解决方案,您还可以创建一个捆绑包以仅在 dev 环境中启用,并将您的文件包含在您的 Bundle 类中,例如:class MyBundle extends Bundle { public function boot() { // include here } }
    • bundle 是一个很好的解决方案,但我需要一个没有命名空间的 global 函数,而不是“本地”类方法。
    • 你只是将你的函数包含在YourBundle::boot()全局空间中,他们不会获得包含文件的命名空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多