Question

I am starting to use Composer and am a bit confused on how to specify how things should be autoloaded.

My initial assumption was that one would define how to autoload classes of a package within this package. I'm however getting the impression that one should specify this in the project where the package is used. Is that the case?

I hope not! I don't want the users of a library to know how autoloading of this library works, such as for instance in which directory the classes are located. For instance, I do not want some client to know that "MyLibrary" has its classes in a directory called "includes":

"autoload": {
    "classmap": [
        "vendor/MyLibrary/includes/",
    ]
}

If on the other hand my current impression is wrong, and thus my initial assumption correct, then my question is how to achieve this. I tried using the following in the composer.json file of one of my libraries, but upon installing it somewhere, no entries would show up in the generated autoload classmap.

"autoload": {
    "classmap": [
        "includes/",
    ]
}
Was it helpful?

Solution

My initial assumption was correct. One needs to define the autoloading for a package within the composer.json file of the package. Nothing outside of the package should know about how its autoloading is done. I am unsure why what I was doing failed to work. In any case, I have not run into this recently.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top