Laravel 框架关键技术解析·读书笔记(二)
第五章
-
框架应用程序根目录(5.1版本)
默认的Laravel框架应用程序是符合PSR规范的,所以相应的目录结构也是基本固定的,不同的目录加载了功能文件,如果添加了新的目录,需要在composer.json文件中添加PSR规范的自动加载部分并执行update命令。
- App: 主要包括应用程序的核心代码,用户构建应用的大部分工作都在app目录下进行,包括路由文件、控制文件、模型文件等。
- bootstrap:主要包含几个框架启动和自动加载配置文件
- config:主要包含应用程序常用的配置文件信息
- database:主要包含数据库迁移和数据库填充文件。
- public :应用程序的入口文件,包含应用程序入口文件index.php,同时包含静态资源文件如CSS,JavaScript,images等。
- resource:主要包含视图文件。
- storage:包含编译后的blade模板,基于文件的session,文件缓存和日志文件等。
- tests:主要包含自动化测试文件。
- vendor:主要包含依赖库文件,其中包括框架源代码
- .env:一个重要的文件,为Laravel框架的主配置文件。
- composer.json:composer项目依赖管理工具
-
app目录
应用程序的大部分内容都存在于app目录下,该目录同样通过composer使用自动加载标准(PSR-4)来加载其中的文件,如果想改变目录下的命名空间,可以使用artisan命令app:name完成,也可以直接修改composer.json文件实现。
- console:主要包含所有的artisan命令
- events:用来控制与事件相关的类
- exceptions:包含应用程序的异常处理类,用于处理应用程序抛出的任何异常
- Http:主要包含路由文件、控制器文件、请求文件,中间文件等,是应用程序与Laravel框架源代码等外部库交互的主要文件。
- Jobs:主要包含消息队列的各种消息类文件
- Listener:主要包含监听事件类文件。
- Provider:主要包含服务提供者的相关文件。
-
vendor目录
由一个个相互依赖的功能组件模块组织起来的,可以独立工作,也可以被组织起来协调工作。
- composer:主要包含composer按照PSR规范生成的自动加载类。应用程序的自动加载都是由这部分实现的。
- laravel:包含laravel框架源代码,代码部分都包含在vendorlaravelframeworksrcIlluminate文件中
- symfony:laravel框架的底层(如请求类、相应类、文件管理类)使用了symfony框架的部分,所以该目录包含这部分内容。
- monolog:包括日志记录模块文件
- phpunit:包含程序单元测试模块文件
-
路由
可以理解为将路由设置的过程理解为微程序内部定义了一个路由表,与网络中使用的路由器一样,也事先需要有一个路由表。当不同的请求到来时,根据路由表选择不同的处理程序
- 基础路由设置
基本路由是一个资源定位符(URL)对应一个响应程序,这个程序可以是一个闭包函数,也可以是一个控制器响应函数的标识
具体格式:
Route::get('/',function () {
return 'Hello Laravel';
});
如果请求其他方法,则需要使用对应的路由设置方法进行定义,对应的方法由get,post,put,delete等。
对于多种请求的路由定义,可以通过match和any方法实现,
Route::match(['get','post'],'/',function () {
return 'Hello Laravel';
});
Route::any('home', function () {
return 'Hello Laravel';
});
- 路由参数
主要针对的是Get请求的情况
Route::get('资源标识/{参数名}[?][/{参数名}……', '闭包函数或者控制器响应函数标识')[->where('参数名','正则表达式')];
Route::get('user/{id}',function ($id){
return '$id=' . $id;
});
Route::get('user/{id}/{name}',function ($id, $name){
return '$id=' . $id . ' and $name=' . $name;
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
-
控制器路由
-
基础控制器路由
Route::get('home/{name}','HomeController@index');
-
- 隐式控制器路由
- RESTFul资源控制器路由
- 路由群组
- 路由命名
相当于在路由定义时为路由起一个别名,以后可以使用别名来获取路由的信息
- 控制器
-
视图
视图文件是以“.balde.php”后缀命名。
-
数据传递
- 数组方式
- with函数
- with加变量名方式
-
blade模板
- @extends('布局文件名'):用于继承一个布局文件
- @section('区块名'):用于定义一个区块,可以有不同的结尾标识,@show用于显示这个区块,@stop和@endsection用于结束一个区块,@overwirte用于重写前面的区块
- @parent:用于显示继承的布局模块中的文件。
- @yield('区块文件',’默认文件‘):用于定义在布局文件中定义一个区块
- @include('子视图文件名称'):用于在视图文件中加载视图文件。
-
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。