自从用 Laravel4做了个小网站,使用了数据库ORM Eloquent, 就放下了一段时间,想不到这个与Asp.net MVC 有着异曲同工之妙的框架已经出了下个版本,而且还有不小的改动,因此不得不从头过一次,顺便更新一下知识点。
下面内容摘自Laravel 5.0 系列, 目录结构和命名空间
Laravel从4升级到5 ,改变的不只是文件的组织方式,而且是思想上的重大转变。 废话不多说, 新版本的目录。
app Console Commands Events Exceptions Http Controllers Auth Middleware Requests Jobs Listeners Providersbootstrap cacheconfigdatabase factories migrations seedspublic resources assets lang viewsstorage app framework cache sessions views logstestsvendor
而在新的目录结构下, 它只包括应用逻辑(包括业务领域), 并且遵循 PSR-4 规范来进行类的自动加载。
由此带来的是, Laravel 相关的配置文件保存在了自己的独立目录下, 资源文件--语言和视图--保存在了自己的独立目录下, 数据库相关的信息也保存在了它们自己的目录下。
最后,原来写在过程文件(比如 filters)中的代码现在移到了类和 Service Providers 中. 可以减少过程代码, 使执行更容易预测。同时也鼓励对 Service Providers 的用户态使用(即 "在我们的代码里,而不是在框架代码里")。
xxx 应该放在哪里?
如果 xxx 代表的是某个类, 或者可以写成一个类的话, 它应该放在 app/
下的某个地方. 如果 xxx 代表的是 Eloquent model, 它应该放在 app/
下的某个地方。如果 xxx 要通过 Web 服务器来处理发送给请求流(比如 Controllers 和 FormRequests), 它应该放在 app/Http
目录下。如果 xxx 要通过 CLI (命令行界面) 来处理请求, 它应该放在 app/Console
目录下。如果 xxx 在以前的版本中是放在 routes.php 文件中(但它不是一个路由定义), 或者是放在 start.php 文件中, 那么现在它应该写到某个 Service Provider 里。如果 xxx 是一个过滤器(filter), 它应该放在app/Http/Filters
目录里一个专属于它的类中。
如果 xxx 不属于上面的任何一种情况, 那么从目录结构就可以很清楚看出它应该放在哪里了。
代码中的命名空间(namespace)是怎么工作的?
默认情况下, 每个 Laravel 应用都有一个代表应用类的顶级命名空间, 一般来说这个命名空间是 "App", 它对应的着 app/
目录, 遵循 PSR-4 规范。
但你只要执行一个 artisan 命令, 可以很轻松地修改 "App/" 下所有实例的根命名空间。
比如新建了一个 Laravel 项目之后, 可以马上执行下面的 artisan 命令, 把根命名空间从 "App" 改为 "Confomo":
$ php artisan app:name Confomo
执行完这个命令之后, app/
目录下的所有类都被归入 "Confomo" 命名空间下下.composer.json
文件里的 PSR-4 自动加载语句会自动更新, Laravel 也清楚应该在哪里去寻找该命名空间下的 filters, controlers 等。下下
composer.json
文件里的 PSR-4 自动加载语句会自动更新, Laravel 也清楚应该在哪里去寻找该命名空间下的 filters, controlers 等。