web-dev-qa-db-ja.com

Composer Autoloadingクラスが見つかりません

私は次のようなフォルダ構造を持っています:

includes/
  libraries/
    Classes/
      Contact/
        Contact.php
        ContactController.php

admin/
  controllers/
    contact/
      edit.php

Contact.phpは、使用しようとしているファイルです。ファイルに含まれています。

<?php
namespace Classes;

class Contact {
    function __construct() {
        die('here');
    }
}

次のようなcomposer.jsonファイルがあります。

{
    "autoload": {
        "psr-4": {
            "Classes\\": "includes/libraries/Classes/"
        }
    },
}

Contactクラスを使用しようとしているファイルはedit.php 以内 admin/controllers/contact/フォルダー。俺の edit.phpファイルは次のようなものです。

<?php

use Classes\Contact;

$contact = new Contact();

var_dump($contact);

このファイルにはvendor/autoload.phpファイルが含まれていますが、クラスを使用するように取得できないようです。

11
Ryan Hipkiss

Classes/Contact/Contact.phpおよびcomposerルール"Classes\\": "includes/libraries/Classes/"は、Classes\Contact\ContactではなくClasses\Contactクラスを意味します。

したがって、実際にClasses\Contactクラスが必要な場合は、Classes/Contact/Contact.phpファイルを親ディレクトリClasses/Contact.phpに移動します。

ただし、クラスへの目的のネームスペースパスがClasses\Contact\Contactである場合、useを変更します。

use Classes\Contact\Contact;

namespace

namespace Classes\Contact;

class Contact {}

├── composer.json
├── includes
│   └── libraries
│       └── Classes
│           └── Contact
│               └── Contact.php
├── test.php
└── vendor
    ├── autoload.php
    └── composer
        ├── autoload_classmap.php
        ├── autoload_namespaces.php
        ├── autoload_psr4.php
        ├── autoload_real.php
        ├── autoload_static.php
        ├── ClassLoader.php
        ├── installed.json
        └── LICENSE

vendor/の下のファイルは作曲家によって生成されます。

composer.json

{
    "name": "testpsr4",
    "autoload": {
        "psr-4": {
            "Classes\\": "includes/libraries/Classes"
        }
    }
}

test.php

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

use Classes\Contact\Contact;

$c = new Contact;
$c->test();

includes/libraries/Classes/Contact/Contact.php

<?php
namespace Classes\Contact;

class Contact {
    public function test () {
        echo __METHOD__, PHP_EOL;
    }
}

テスト

composer update
php test.php

出力

Classes\Contact\Contact::test
11
Ruslan Osmanov