composer自动加载
这时候我们就可以使用composer中的自动加载来加载我们想要的类了。
在我们在composer.json文件中
加入
{
"require": {
"slim/slim": "^3.0"
},
"autoload": {
"psr-4" : {
"" : ""
}
}
}
这里的意思是根据PSR4规范来加载对应的类(PSR0,PSR4都可以,这里用PSR4)
冒号前面是根命名空间,冒号后面是根目录(注意''转义)
因为我们这里是在\Controller\UserCon
下加载根目录下Controller文件下的UserCon类,冒号前面是根命名空间(这里根命名空间就是''),
冒号后面是根目录,所以写成了
"psr-4" : {
"" : ""
}
的形式
添加完这段代码后需要用composer重写自动加载(vendor/autoload)
在名命令行中
composer dump-autoload
或者
composer install
再次打开服务,输入localhost:8000/name
会发现服务已经以来了
如果我们把跟命名空间定义为其他的,比如说Van
我们希望Van这个命名空间指向Controller
那么需要在composer中
修改index中'/name'的路由
$app->get('/name', \Van\UserCon::class.':getUserName');
修改Controller目录下的UserCon.php
<?php
namespace Van;
Class UserCon
{
public function getUserName()
{
echo 'wang';
}
}
这样的话,就是Van这个命名空间指向Controller这个文件夹了
我们需要将composer.json文件修改为
{
"require": {
"slim/slim": "^3.0"
},
"autoload": {
"psr-4": {
"Van\\": "Controller/"
}
}
}
然后重新composer install一下,就可以了,启动服务/name下依然会正常显示。
"files"配置
在composer.json下autoload里,files配置的决定了单独会自动加载进来的文件,不要遵守PSR0和PSR4,一般用来引入公共文件
我们在composer.json中加入 "files": ["Common/functions.php"]
{
"require": {
"slim/slim": "^3.0"
},
"autoload": {
"psr-4": {
"Van\\": "Controller/"
},
"files": ["Common/functions.php"]
}
}
然后重新install
在根目录中建立Common文件夹,创建functions.php文件
写入
<?php
function getMeFive (){
echo 'haha~';
}
然后路由中加入
$app->get('/givemefive',function(){
getMeFive();
});
启动服务访问 localhost:8000/givemefive
页面显示haha~
说明正常,composer帮我们加载了这个文件
Class-map
Class-map也是一种写法,但是没增加一个类都要执行一边composer,以便生成新的autoload_classmap.php文件
比如
"classmap": ["Model/"]
在composer中这样写,
他就会把Model/下的所有类文件根据明名空间加类名一一对应起来
比如你Model中有个User类
他会生成'Model\\User' => $baseDir . '/Model/User.php',
这样的对应,缺点就是每当有新的类文件我们都需要执行一下composer install生成新的classmap