【问题标题】:PSR4 - using autoload in composer instead of requirePSR4 - 在作曲家中使用自动加载而不是要求
【发布时间】:2018-01-24 04:21:10
【问题描述】:

我是 SLIM3 的新手,并在使用 Composer 时按照a tutorial 安装它。在教程中,我尝试使用autoload 来加载我的所有类,而不必使用require,这是我的文件结构:

dev
|── composer.json
|── index.php
|──── classes
|──── vendor

这是我的composer.json 文件:

{
    "require": {
        "slim/slim": "^3.0",
        "monolog/monolog": "^1.23"
    },
    "autoload": {
        "psr-4": {
            "": "classes/"
        }
    }
}

这是pdf.class.php,它位于classes下方

dev
|── composer.json
|── index.php
|──── classes
     |─ pdf.class.php
|──── vendor

class pdfClass {
    public function testme(){
        return 'i am working';
        $this->logger->addInfo("Something interesting happened");
    }
}

和 index.php:

<?php
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;

// Require for loading the vendor libraries installed by composer
require 'vendor/autoload.php';
// require 'classes/pdf.class.php'; // << If I uncomment this line it works.


$config['displayErrorDetails'] = true;
$config['addContentLengthHeader'] = false;

$app = new \Slim\App(["settings" => $config]);
$container = $app->getContainer();

$app->post('/{controller}/{function}', function (Request $request, Response $response) {
    $headers = $request->getHeaders();
    $params = $request->getParsedBody();

    $classname = $request->getAttribute('controller').'Class';

    $controller = new $classname;
    $function = $request->getAttribute('function');

    $result = $controller->$function();

    $response->getBody()->write($result);
    return $response;
});

$app->run();

composer.json 中的 autoload 部分不应该允许我在不需要它的情况下使用该类吗?

【问题讨论】:

    标签: php slim psr-4


    【解决方案1】:

    不确定您的确切问题是什么,但 psr-4 要求文件名与类名完全相同,因此在您的情况下可能是 Pdf.php 而不是 pdf.class.php

    终止类名对应于以 .php 结尾的文件名。 文件名必须与终止类名的大小写匹配。

    http://www.php-fig.org/psr/psr-4/

    【讨论】:

    • 要添加@meta 提到的内容,您还需要在自动加载后访问自动加载的类时use Pdf;。就像您声明使用请求和响应一样。
    • 是的,这就是问题所在,类名也必须与文件名匹配。所以pdf.php 中的class pdfClass 不起作用。
    猜你喜欢
    • 2019-02-05
    • 2013-03-05
    • 2016-07-27
    • 1970-01-01
    • 2014-01-31
    • 2013-12-09
    • 2014-08-15
    • 2015-10-22
    相关资源
    最近更新 更多