Bước 1: Tạo file composer.json
Copy composer init
Sau đó điền thông tin ví dụ:
Package name (<vendor>/<name>) [administrator/windows]: test/one
Bước 2: Bổ sung thông tin psr-4 cho composer.json
Copy {
"name": "test/one",
"description": "Test One",
"authors": [
{
"name": "ky anh",
"email": "phamkyanh8668@gmail.com"
}
],
"autoload": {
"psr-4": {
"Viblo\\": "src/"
}
},
"require": {}
}
\index.php
Copy <?php
require __DIR__ . '/vendor/autoload.php';
use Viblo\Controllers\HomeController;
$homeCtrl = new HomeController;
print_r($homeCtrl->actionIndex());
src/Controllers/HomeController.php
Copy <?php
namespace Viblo\Controllers;
use Viblo\Models\User;
class HomeController
{
public function actionIndex()
{
return (new User)->list();
}
}
src/Models/User.php
Copy <?php
namespace Viblo\Models;
class User
{
public function list()
{
return [1, 2, 3];
}
}
https://viblo.asia/p/php-autoloading-psr4-and-composer-V3m5Wy0QZO7
Autoloading với Composer
Để thực hiện autoloading với Composer bạn cần khai báo trong file composer.json
. Composer hỗ trợ các kiểu autoload PSR-4, PSR-0, classmap và files, các bạn có thể tham khảo tài liệu gốc .
Ở đây, mình sẽ ví dụ autoload PSR-4 với Composer.
Ví dụ bạn có cấu trúc thư mục như sau:
Copy .
├── composer.json
├── index.php
└── src
├── Controllers
│ └── HomeController.php
├── Models
│ └── User.php
└── Views
└── home.php
File src/Models/User.php
:
Copy <?php
namespace Viblo\Models;
class User
{
public function list()
{
// TODO: get actual data
return [1, 2, 3];
}
}
Tương tự file src/Controllers/HomeController.php
sẽ có namespace Viblo\Controllers
.
Copy <?php
namespace Viblo\Controllers;
use Viblo\Models\User;
class HomeController
{
public function actionIndex()
{
return (new User)->list();
}
}
Thư mục Views gồm những file markup PHP, Html nên sẽ không thực hiện autoload.
Tiếp theo, chúng ta có file composer.json
:
Copy {
"autoload": {
"psr-4": {
"Viblo\\": "src/"
}
}
}
Sau đó chạy lệnh:
Copy composer dump-autoload
Câu lệnh này sẽ tạo ra file autoloader vendor/autoload.php
, autoloader này sẽ load các rule được implement trong vendor/composer/autoload_*.php
.
Copy vendor/composer
├── autoload_classmap.php
├── autoload_files.php
├── autoload_namespaces.php
├── autoload_psr4.php
├── autoload_real.php
├── autoload_static.php
├── ca-bundle
├── ClassLoader.php
├── installed.json
├── installers
└── LICENSE
Sử dụng index.php
:
Copy <?php
require __DIR__ . '/vendor/autoload.php';
use Viblo\Controllers\HomeController;
$homeCtrl = new HomeController;
print_r($homeCtrl->actionIndex());
// ...