Composer自动加载配置
时间:2023-03-30 04:55:09
PHP
Composer就不多说了,它是一个PHP包管理器,类似于node.jsnpm,pythonpipcomposer中都有自动加载配置,可以帮助我们自动加载我们的类。slim做路由demo首先安装slim并创建一个文件夹,我将其命名为modernroute(随便这个)然后创建一个composer.json文件来安装slim,从命令行进入该文件夹后,composerrequireslim/slim"^3.0",那么slim就好了现在,在根目录下创建一个index.php文件get('/',function(){echo'是我的';});$app->run();然后命令行php-Slocalhost:8000让服务运行起来;如果我们在slim中创建路由,我们希望通过controller中的方法执行,而不是像这样通过匿名函数执行怎么办?slim官方文档给了我们一个方法(https://www.slimframework.com/docs/v3/objects/router.html#how-to-create-routes搜索关键字\HomeController::class)来创建我们对应的文件想通过根目录Controller文件夹下UserCon类中的getUserName方法处理'/name'路由修改index.phprequire'vendor/autoload.php';$app=newSlim\App();$app->get('/',function(){echo'是我的';});$app->get('/name',\Controller\UserCon::class.':getUserName');$app->run();然后在根目录下创建Controller文件夹,文件夹下创建UserCon文件。文件夹结构如下-Controller-UserCon.php-vendor-index.php-composer.json-compooser.lock编辑UserCon.php中的内容
打开报错调试后发现slimCouldnotfindtheclass\Controller\UserCon(在https://www.slimframework.com/docs/下搜索displayErrorDetailsv3/handlers/error.html)此时composer自动加载我们可以使用composer中的autoload来加载我们想要的类我们在composer.json文件中添加{"require":{"slim/slim":"^3.0"},"autoload":{"psr-4":{"":""}}}的意思根据PSR4规范加载相应的类(这里可以使用PSR0、PSR4,这里使用PSR4)。冒号前是根命名空间,冒号后是根目录(注意''转义)因为我们这里加载的是\Controller\UserCon下对于根目录下的Controller文件下的UserCon类,根命名空间冒号前是(这里的根命名空间是''),冒号后是根目录,所以写成"psr-4":{"":""}添加这段代码后,你需要用composer重写autoload(vendor/autoload)在name命令行composerdump-autoload或者composerinstall重新打开服务,输入localhost:8000/name就会发现服务来了。如果我们把下面的命名空间定义为other。比如我们要让Van命名空间指向Controller,我们需要修改composer$app->get('/name',\Van\UserCon::class中index中'/name'的路由。':获取用户名');修改Controller目录下的UserCon.phpget('/givemefive',function(){getMeFive();});启动服务并访问localhost:8000/givemefive。页面显示哈哈~说明正常,Composer帮我们加载了这个文件Class-mapClass-map也是一种写法,但是如果不添加class,必须执行composer生成新的autoload_classmap.php文件如"classmap":["Model/"]incomposer这样写的话,会根据命名空间加上类名匹配Model/下的所有class文件。例如,如果您的模型中有一个User类,它将生成'Model\\User'=>$baseDir。'/Model/User.php',这种对应的缺点是每当有新的class文件,我们都需要执行composerinstall来生成新的classmap