避免在每个文件中都要求vendor / autoload.php

时间:2017-12-11 20:44:16

标签: php composer-php autoload psr-4

我目前正在学习使用composer和psr-4在php中自动加载。我已成功配置我的composer.json,我可以使用命名空间访问类。现在,问题是我必须在我想要使用它的每个文件中包含vendor / autoload.php。它看起来像是因为我在项目中的结构:

require("../../../vendor/autoload.php");

是否有更简洁的方法来执行此操作或避免在每个文件中都要求它?

我尝试过使用该路由创建一个Global变量,但它无效。这就是我的尝试:

在index.php的开头: $GLOBAL["autoloadPath"]= $_SERVER['DOCUMENT_ROOT'] . '/ipa-crm/vendor/autoload.php';

然后我在我需要的每个文件中添加了这个: require_once $GLOBAL["autoloadPath"];

提前致谢。

3 个答案:

答案 0 :(得分:0)

使用auto_prepend_file中的配置.htaccess,您可以自动将PHP文件添加到所有请求的PHP文件中。只需将它放入.htaccess,就像这样:

php_value auto_prepend_file "/path/to/file/before.php"
php_value auto_append_file "/path/to/file/after.php"

答案 1 :(得分:0)

我想说最推荐的方法是让一个文件加载所有其他文件,这些文件会根据当前操作加载所有其他文件。

所以你有index.php文件的内容与此类似(这显然非常简化):

require __DIR__.'/../vendor/autoload.php';

switch ($_GET['url']) {
    case 'contact':
       require __DIR__.'/../pages/contact.php';
       break;
    case '':
       require __DIR__.'/../pages/main.php';
       break;
   default:
      require __DIR__.'/../pages/404.php';
}

你还有.htaccess个文件,其中包含mod重写功能:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*)(.*)/?$ index.php?url=$1&%{QUERY_STRING}

现在所有流量都将通过index.php,您只能在此单个文件中使用Composer自动加载器。

答案 2 :(得分:0)

可能有多种不同的解决方案。最干净的方法是仅在配置文件中使用require_once,其中每个项目都有自己的供应商文件夹集。但是localhost或允许重新配置php.ini的服务器上有一个高级选项:

修改您的php.ini,以添加指向作曲家的全局路径的自定义路径。然后写:

<?php
require_once "vendor/autload.php";

确保您不使用本地供应商目录,或者仅确保您的作曲家已在本地定义了所有内容。我的意思是,本地 ./ vendor 目录的存在是可选的。我的示例中缺少的“ ./” 将允许PHP查找全局路径。然后,始终全局使用您的作曲家(安装作曲家库时,将 global 作为附加参数使用。

您的 php.ini 可能类似于:

include_path = "C:/Users/USER/AppData/Roaming/Composer"

因此,vendor / autload.php始终可用于任何php文件,如果它们将require_once称为“ vendor / autoload.php”。希望您将在整个项目的配置文件中使用它一次,而不是从单个脚本中使用它。