当您接手一个新项目时,它可能会让人不知所措,尤其是如果您是编程新手。那么我们从哪里开始呢?我们需要关注项目代码的哪些部分?让我们看一下Laravel项目的一些公共部分。项目文档文档可能是面对新项目时最有用的东西。如果项目包含文档,那么恭喜你,你很幸运。但是,不要太兴奋太早,因为文档可能已过时或不完整。项目文档通常以自述文件、wiki形式编写,或发布在Confluence和GoogleDocs等共享平台上。如果你是基于一个项目进行开发,请不要犹豫,请积极为项目文档做出贡献:填空或使其更清晰。如果您不走运(大多数时候都是这样),那么您正在接触一个没有任何文档的项目。缺少文档并不完全是坏事,因为在这种情况下,您有机会自己为您的团队编写文档。您和您的同事,以及您带来的新开发人员,将来都会感谢您。写文档确实不是什么好玩的工作,但是保持项目长期运行是很有必要的。项目文档不仅要列举使用的技术和最初的安装方法,还要解释项目的“为什么”和“怎么做”,而这些往往无法在代码本身中表达清楚。还应记录某些高级设计选择及其原因,以帮助更好地理解代码。composer.jsonComposer是一个PHP包管理工具,在过去几年中帮助推动了PHP生态系统的快速发展。Laravel从版本4开始使用Composer,所以项目中基本上有一个composer.json文件。你可以在项目根目录下找到composer.json文件和composer.lock文件。锁文件包含项目中需要的所有依赖项的确切版本,而JSON文件显示依赖项的已发布内容。目前,我们只对JSON文件中的版本信息感兴趣,如果您想了解有关这些文件的更多信息,可以阅读此处。浏览composer.json文件时,请注意有一个require块,如下所示。{“require”:{“php”:“>=7.1.3”,“fideloper/proxy”:“~4.0”,“laravel/framework”:“5.6.*”,“laravel/tinker”:“~1.0"}}在这个例子中,我们有一个基于Laravel5.6的项目。它还依赖于另外两个包,以及PHP7.1.3或更高版本。在您的项目中,您可能会看到更多依赖项,并且版本号可能会发生变化。现在您知道了您的项目依赖于哪些扩展,让我们弄清楚它们各自的功能是什么。我建议从Laravel依赖项开始,因为它们有详细的文档记录。并且文档发布在网上,很容易找到:https://laravel.com/docs/{VERSION}和https://laravel.com/api/{VERSION},链接如下https://laravel.com/docs/5.6>…。文档docs全面介绍了laravel的功能和各主要部分的工作原理。同时,api文档以列表的形式呈现了laravel框架中使用的类和方法。在查看Laravel文档后,您可以继续阅读其他相关文档。你可以去Packagist(这是Composer使用的扩展包仓库)获取更多依赖信息。每个扩展对应的地址是https://packagist.org/packages/{VENDOR}/{PACKAGE},比如https:https://packagist.org/package...。在每个Packagist项目的首页,都会展示扩展包的介绍、版本号、仓库地址(如GitHub)、完整的readme文件等有用的信息。从项目主页获得的信息足以让你了解这个扩展包是什么,以及它在你的项目中承担了哪些功能。通过这种方式,继续了解项目应用程序的composer.json文件中列出的其他依赖项。路由路由是应用特定功能的入口点。路由表示为链接,当浏览器访问该链接时,最终由绑定的控制器或闭包处理。通过路由找到对应的controller,就可以知道controller所依赖的其他模块以及它实现的具体功能。遇到新的路由,不断重复这个动作,就可以逐渐弄清楚整个应用是如何工作的。你可以在项目的以下位置找到路由配置文件:Laravel5.3+routes/*.phpLaravel5.0-5.2app/Http/routes.phpLaravel4.2app/routes.php路由“陷阱”有时候,需要定位路由根据具体的URL动动脑筋。例如URI/users/123/profile。您可能想要搜索users/{id}/profile路由定义。实际上是在路由组中定义的,这使得路由更难定位。Route::prefix('users')->group(function(){Route::get('{id}/profile','UsersController@profile');});在这个例子中,users和{id}/profile没有写在一起,所以很难定位。如果路线不多,还是比较容易找到的。然而,当路由文件有数百或数千个定义时,这会变得非常困难。另一个坑是Route::resource()(和新版本的Route::apiResource())。Route::resource()会根据指定的参数自动生成路由。例如,添加代码Route::resource('dogs','DogController');到路由文件将完成与下面的代码相同的事情。Route::group(['prefix'=>'dogs'],function(){Route::get('/','DogsController@index')->name('dogs.index');Route::get('create','DogsController@create')->name('dogs.create');Route::post('/','DogsController@store')->name('dogs.store');路线::get('{id}','DogsController@show')->name('dogs.show');Route::get('{id}/edit','DogsController@edit')->name('dogs.edit');Route::put('{id}','DogsController@update')->name('dogs.update');Route::delete('{id}','DogsController@destroy')->name('dogs.destroy');});但是,如果您尝试查找类似dogs/{id}/edit的内容,将找不到,因为它被定义为.有时直接通过Route::resource()定义路由很方便,但我更喜欢单独定义每个路由,这样每个URI更容易直接搜索。有关路由资源和资源控制器的更多信息,您可以查看这些文档。预览项目中所有路由的最简单方法是使用artisan命令route:list:phpartisanroute:listroute:list命令提供了每个路由的完整详细信息,包括HTTP请求方法、具体URI、路由名称、操作信息(即controller及其methods),以及为每条路由配置的中间件信息。服务提供者服务提供者是Laravel魔法发生的地方。官方文档对此进行了总结:ServiceProviders是所有Laravel应用程序的引导中心。你的应用程序,以及Laravel的所有核心服务,都是通过服务提供者引导的。在这里,我们所说的“引导”其实是指注册,比如服务容器绑定、事件监听器、中间件的注册,甚至路由的注册。服务提供商是配置您的应用程序的核心。您可以浏览位于app/providers目录中的所有应用程序提供程序。围绕应用定制添加的相关代码应该在这里。例如,某些情况下会寻找视图合成器、宏,并进行配置调整。在旧版本的Laravel中,例如4.2,您会在global.php文件中找到类似的功能,从那时起服务提供者通常只在包中使用。测试存储库包含测试套件,向您展示应用程序如何工作以及如何响应。它可以提供有关应用程序边界处理条件的宝贵线索。当然,就像代码库文档一样,应用程序附带的测试文件可能不存在,或者很少,甚至是无用和过时的文件。和写项目文档一样,写应用支持测试也能更好的学习项目应用,提高代码质量。您可能会偶然发现并修复一些错误、删除未使用的代码或将测试覆盖率添加到项目中的重要类。Barryvd的LaravelDebugbar是Laravel开发人员的绝佳工具。Heuvel是一个有价值的调试和跟踪工具。它功能强大且易于安装。你可以一目了然地看到应用程序中发生了什么:传递的路由和控制器,数据库查询和执行时间,数据显示,异常,查看执行内容和执行过程时间线等。尝试使用这个包后,你会爱上它在你的Laravel应用程序开发中。结论在这篇文章中,我提出了一些方法,让你可以快速上手新的Laravel项目代码。本文不是详尽的列表,而是一个开始。我鼓励您使用这些建议,看看它会把您带到哪里。如果您有任何交流想法,我很乐意听取他们的意见!请随时联系Twitter。讨论请前往Laravel知识社区:https://laravel-china.org/top...
