【问题标题】:How to autoload files using compose autoload and psr-4如何使用 compose autoload 和 psr-4 自动加载文件
【发布时间】:2018-04-10 16:09:36
【问题描述】:

我正在尝试自动加载文件并为我的应用设置一个入口点。我没有使用框架,而是使用 OOP。 我的 composer.json 文件是:

{
    "require": {
        "tebazil/db-seeder": "^0.0.0"
    },
    "autoload": {
        "psr-4": {
            "vendor\\": "vendor/",
            "App\\": "src/classes/"
        },
        "files": [
            "src/functions.php"
        ]
    }
}

在这个文件functions.php 中,我想包含vendor/autoload.php 文件。 我不确定如何为应用程序创建这个入口点,并在那里需要这个供应商/自动加载文件,因为我已经为此目标使用了框架。

这是 functions.php 的当前内容,但是在我渲染 index.html 视图文件时还有另一个问题,但是有 ajax 请求。 但是,为应用创建引导文件并自动加载必要文件的正确方法是什么?

<?php
namespace App;

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

use App\Db;
use App\User;
class Functions
{

    public function render()
    {
        ob_start();
        include(__DIR__ . '/../index.html');
        $content = ob_get_contents();
        ob_end_clean();
        echo $content;
    }
}

if(!($_GET && array_key_exists('name', $_GET))) {
    $functions = new Functions();
    $functions->render();

}

if($_GET && array_key_exists('name', $_GET)){
    $user = new User();
    $users = $user->getUsers();
}

【问题讨论】:

  • 你在那里有一个循环依赖。自动加载的文件包含在自动加载器中,但您的自动加载的文件包含自动加载器。

标签: php composer-php autoload


【解决方案1】:

据我所知,您不需要在作曲家中注册“functions.php”。您的应用程序可能具有以下结构:

- app_folder/
  - src/
    - classes/
    - index.html
  - public/
    - functions.php
  - vendor/
    - ...

其中“functions.php”文件用作应用程序入口点。将您的网络服务器定向到“公共”文件夹,因此您的 php 代码可以访问所有其他文件,但用户不能访问。

您可以在“functions.php”中实现您的路由或类似任务,并将模型和视图等组件放置到“src”中,您将获得简单而结构化的应用程序。

【讨论】:

  • 我对原始结构的唯一补充是“公共”文件夹的概念,它应该是唯一可以通过网络服务器访问的东西。将您的入口点和所有将由 Web 服务器提供服务的资产(例如图像)放在那里。其他一切都取决于您和您的任务。您可以在需要时使用特定的库在纯 php 中非常成功地解决任务。
猜你喜欢
  • 2015-01-08
  • 2014-07-25
  • 2015-04-20
  • 2023-03-09
  • 1970-01-01
  • 2018-02-20
  • 2014-10-19
  • 2015-03-28
  • 2017-09-15
相关资源
最近更新 更多