路由主要有两部分组成,一部分是路由的匹配过程,一部分是路由表的生成过程,这里通过跟中代码看下路由表的生成过程。
symfony中的路由是通过 标注(annotation)的形式进行定义的,symfony是通过配置文件进行查找进行路由的解析,最终将路由存储到缓存文件 var/cache/prod/appProdProjectContainerUrlMatcher.php
中。
symfony 的容器是有一个编译过程的,框架初始化的时候会执行 Symfony\Component\HttpKernel\Kernel::initializationContainer
,这个方法会对代码进行检查,看是否需要生成新的容器代码。如果需要 Symfony 会将各个类的依赖关系通过编译生成静态的类并存储在缓存文件var/cache/[ENV]/appProjectContainer
中。
其中很多是框架自己的依赖关系,这些依赖关系类似java的方式,通过xml文件的形式进行声明,这些xml存在与框架的代码中,Syfmony\Bundle\FrameworkBundle\Resource\config\*.xml
。
xdebug的断点原理就是,通过php的xdebug对php运行的变量文件等信息进行监听,并通过9000端口以及DBGp协议,将这些信息发送给客户端PHPStrom。
PHPStrom 作为IDE对自己内部设置的断点以及接收到的数据进行安排显示,并再次通过9000端口,做出响应到服务端的xdebug。
vagrant与docker
vagrant 是一个对虚拟机的管理工具,方便搭建、移植自己的linux开发环境
docker 是一种容器技术,每个服务(php-fpm mysql redis) 适合做成一个docker容器,方便本地模拟分布式开发环境换,保持开发环境与生产环境的高度一致
使用apidoc
可以通过分析代码中的注释生成文档,由于apidoc
生成的文档是一个单文件
多人开发过程中会导致文件的覆盖,可以通过git
代码分支合并的时候通过钩子(web hook)生成文档到文档服务器
文档服务器通过samba
服务 实现代码服务器将生成的文档写入文档服务器。由于是静态文件可以使用node
来跑
这样避免多项目的时候 需要在文档服务器绑定不同的域名来实现单台文档服务器跑多个项目的接口文档的麻烦
composer 是php中经常使用的包管理器 日常使用中也存在很多使用的注意事项
这里总结下使用composer比较实用的知识点