I am using composer on windows, and it is successfully loading my 2 packages that I'm using from my composer.json file when I perform a composer install or composer update.
{ "require": { "bcosca/fatfree": "dev-master", "respect/validation": "^1.1" } } The first line in my index.php is
require_once __DIR__ . '\vendor\autoload.php'; This didn't seem to be loading anything, a lot of errors related to classes not defined from these 2 packages, for example. I looked into it further and discovered that my autoload_namespaces.php is as follows:
<?php // autoload_namespaces.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( ); The array is completely empty, how does this happen? I expected to see these 2 packages' requirements in here...
Thanks for the help!
Adding composer.json from the packages themselves: F3:
{ "name": "bcosca/fatfree", "description": "A powerful yet easy-to-use PHP micro-framework designed to help you build dynamic and robust Web applications - fast!", "homepage": "http://fatfreeframework.com/", "license": "GPL-3.0", "require": { "php": ">=5.3.6" }, "repositories": [ { "type": "vcs", "url": "https://github.com/bcosca/fatfree" } ], "autoload": { "files": ["lib/base.php"] } } Validator:
{ "name": "respect/validation", "description": "The most awesome validation engine ever created for PHP", "keywords": ["respect", "validation", "validator"], "type": "library", "homepage": "http://respect.github.io/Validation/", "license": "BSD Style", "authors": [ { "name": "Respect/Validation Contributors", "homepage": "https://github.com/Respect/Validation/graphs/contributors" } ], "require": { "php": ">=5.4", "symfony/polyfill-mbstring": "^1.2" }, "require-dev": { "egulias/email-validator": "~1.2", "malkusch/bav": "~1.0", "mikey179/vfsStream": "^1.5", "phpunit/phpunit": "~4.0", "symfony/validator": "~2.6.9", "zendframework/zend-validator": "~2.3" }, "suggest": { "ext-bcmath": "Arbitrary Precision Mathematics", "ext-mbstring": "Multibyte String Functions", "egulias/email-validator": "Strict (RFC compliant) email validation", "malkusch/bav": "German bank account validation", "symfony/validator": "Use Symfony validator through Respect\\Validation", "zendframework/zend-validator": "Use Zend Framework validator through Respect\\Validation", "fabpot/php-cs-fixer": "Fix PSR2 and other coding style issues" }, "autoload": { "psr-4": { "Respect\\Validation\\": "library/" } }, "autoload-dev": { "psr-4": { "Respect\\Validation\\": "tests/library/" } }, "extra": { "branch-alias": { "dev-master": "1.1-dev" } }, "scripts": { "test": "./vendor/bin/phpunit" } } And after loading Validator, this Symfony component came with it:
{ "name": "symfony/polyfill-mbstring", "type": "library", "description": "Symfony polyfill for the Mbstring extension", "keywords": ["polyfill", "shim", "compatibility", "portable", "mbstring"], "homepage": "https://symfony.com", "license": "MIT", "authors": [ { "name": "Nicolas Grekas", "email": "p@tchwork.com" }, { "name": "Symfony Community", "homepage": "https://symfony.com/contributors" } ], "require": { "php": ">=5.3.3" }, "autoload": { "psr-4": { "Symfony\\Polyfill\\Mbstring\\": "" }, "files": [ "bootstrap.php" ] }, "suggest": { "ext-mbstring": "For best performance" }, "minimum-stability": "dev", "extra": { "branch-alias": { "dev-master": "1.3-dev" } } } 2 Answers
Answers 1
The array is completely empty, how does this happen? I expected to see these 2 packages' requirements in here...
Composer supports multiple class loading methods. One important implements the
PSR4specification.SymfonyandRespectare usingPSR4. You can verify it by looking at theircomposer.jsonfiles or your generatedvendor/composer/autoload_psr4.phpfile.Fat-Free Framework lets Composer autoload its
lib/base.phpfile. This is important to know because includingbase.phptwice will throw aPHP Fatal error: Cannot declare class Cache, because the name is already in use. The solution is to let Composer do its job and fetch the$f3 = Base::instance()instead.
Suggestions
Delete the
vendorfolder and make a clean install withComposerVerify that the class namespaces aren't missing (or are imported) in your code, e.g.
\Respect\Validation\Validatorinstead ofValidator
Answers 2
The problem is with your require_once() line. It has not given the correct file path to the autoload.php. If your 'vendor' directory is in the same level as index.php then all you have to do is simply require the autoloader as shown below:
<?php require_once 'vendor/autoload.php'; echo 'Loaded...'; Note that there is absolutely nothing wrong with the autoload_namespaces.php. Mine is also same as yours.

0 comments:
Post a Comment