Directory structure:
| composer.json
| composer.phar
| index.php
|
+---app
| +---controller
| | Home.php
| |
| \---model
| FirstDb.php
|
\---vendor
| autoload.php
|
\---composer
autoload_classmap.php
autoload_namespaces.php
autoload_psr4.php
autoload_real.php
autoload_static.php
ClassLoader.php
LICENSE
1. Standard case – with namespaces
root/composer.json
{
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
}
root/app/controller/Home.php
<?php
namespace App\Controller;
class Home{
public function index(){
echo "Hello from Home->Index!";
}
}
root/app/model/FirstDb.php
<?php
namespace App\Model;
class FirstDb{
public function db(){
echo "Hi from first DB";
}
}
root/index.php
<?php
use App\Controller\Home;
use App\Model\FirstDb;
require_once __DIR__ . '/vendor/autoload.php';
$h = new Home();
$fdb = new FirstDb();
echo $h->index()."\n";
$fdb->db();
2. Without namespaces
root/composer.json
{
"autoload": {
"psr-4": {"": ["app/controller", "app/model"]}
}
}
root/app/controller/Home.php
<?php
class Home{
public function index(){
echo "Hello from Home->Index!";
}
}
root/app/model/FirstDb.php
<?php
class FirstDb{
public function db(){
echo "Hi from first DB";
}
}
root/index.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
$h = new Home();
$fdb = new FirstDb();
echo $h->index();
$fdb->db();
3. Mix usage
root/composer.json
{
"autoload": {
"psr-4": {
"": "app/"
}
}
}
root/app/controller/Home.php
<?php
namespace controller;
class Home{
public function index(){
echo "Hello from Home->Index!";
}
}
root/app/model/FirstDb.php
<?php
namespace model;
class FirstDb{
public function db(){
echo "Hi from first DB";
}
}
root/index.php
<?php
require_once __DIR__ . '/vendor/autoload.php';
$h = new controller\Home();
$fdb = new model\FirstDb();
echo $h->index();
$fdb->db();
4. Composer addPsr4() without cnahge composer.json – dynamically add classes
root/composer.json
{
"name": "some/test",
"require": {}
}
root/app/controller/Home.php
<?php
namespace App\Controller;
class Home{
public function index(){
echo "Hello from Home->Index!";
}
}
root/app/model/FirstDb.php
<?php
namespace App\Model;
class FirstDb{
public function db(){
echo "Hi from first DB";
}
}
root/index.php
<?php
use App\Controller\Home;
use App\Model\FirstDb;
$loader = require __DIR__ . '/vendor/autoload.php';
$loader->addPsr4('App\\', 'app/');
$h = new Home();
$fdb = new FirstDb();
echo $h->index()."\n";
$fdb->db();
5.Some important commands
Some important commands:
To initially install the defined dependencies: php composer.phar update to make sure the vendor directory is up in sync with your composer.lock file php composer.phar install To update to the latest versions php composer.phar update After adding the autoload field, you have to re-run this command: php composer.phar dump-autoload php composer.phar dump calls composer dump-autoload. how to create a composer.json by hand php composer.phar init To list all of the available packages php composer.phar show It will replace your composer.phar with the latest version: php composer.phar self-update all directories or files to search for classes: { "autoload": { "classmap": ["src/", "lib/", "Something.php"] } } Wildcards (*) are also supported in a classmap paths, and expand to match any directory name: { "autoload": { "classmap": ["src/addons/*/lib/", "3rd-party/*", "Something.php"] } } if your package includes PHP functions that cannot be autoloaded by PHP: { "autoload": { "files": ["src/MyLibrary/functions.php"] } } HELP ========================= to see the complete list of commands composer list --help combined with any of those can give you more information