laravel框架泛解

框架目录 在此列出一些比较核心的目录

  • app --应用核心目录,放置控制器、业务处理、中间件、服务提供者代码的目录
    • Http --处理路由过来的http请求
      • Controllers
      • Middleware --中间件
    • providers --服务提供者
  • bootstrap --应用启动文件
  • public --应用框架入口文件
  • resources --前端资源文件
  • routers --路由配置
  • vendor --框架依赖安装目录
基本概念
  • 依赖注入
    类的依赖通过构造器或在某些情况下通过「setter」方法「注入」。说简单点,就是一个类的实例化依赖与另一个类的实例化。
  • 服务容器
    可以理解为一个放置多种类工厂的盒子
  • 服务提供者
    提供具体类实例
  • 中间件
    中间件为被挂载在路由解析到具体controller或者回调之前的一段逻辑。我们可以利用中间件做用户验证、访问控制等一些整体框架流程之外的动作。
  • 路由
    提供灵活的访问路径解析方式,并提供一系列的路由配置项,用以解析http请求到具体的业务入口
整体结构 laravel框架泛解
文章图片
简单的框架流程 走通流程
  • 路由配置
    我们创建了一个UserController,里面有一个返回姓名的方法getName

我们如何得到这个方法的返回值呢?这里就需要配置路由,让框架根据配置好的路由将http请求解析到UserController的getName方法.如果阅读过框架的启动文件app.php,相信你会注意到一段代码
$app->router->group([ 'namespace' => 'App\Http\Controllers', ], function ($router) { require __DIR__.'/../routes/web.php'; });

在router对象的group方法的第二个参数回调中可以看到,方法加载了routes目录下的web.php文件,所以我们的路由配置可以写在这个文件中
/* 定义路由到控制器 */ $router->get('user/name', ['uses' => 'UserController@getName']);

get方法中的第一个参数用于指定http url的path部分,第二个参数,设置路由将匹配到的请求转交到UserController的getName方法处理。配置好以后,我们可以通过http://domain/user/name这样的url发起http get请求,即可获取到UserController中getName方法的返回值了。
router对象支持以常见的几种HTTP Method名称指定http请求的访问动作, 例如这里的get,指代get请求,你还可以使用post、put、delete等。方法的第一个参数匹配http url的path部分,支持参数匹配。第二个参数接收一个配置数组,可以在其中指定该条路由的一些特性
laravel路由详情
  • 制定中间件
    假如我们只允许通过get的方法获取到用户的姓名,当监测到非get请求时,我们需要做自己的逻辑,而不是抛出错误,这个时候,我们可以做一个限制请求方法的中间件,将其挂载user/name的路由上,在解析路由之前做自己的逻辑处理.
首先我们制作好自己的中间件逻辑。可能你对Closure类的作用不是很了解,这里我们先按下不表,只需知道它可以将http请求继续流转到框架的下一个加载流程中就好
isMethod('get')) { // TODO }return $next($request); //延续框架路由解析流程 }}

然后通过middleware配置项将中间件挂载到user/name这条路由上,当请求的http method不是get的时候,就会走到``TODO```的逻辑块
$router->get('user/score', [ 'middleware' => App\Http\Middleware\UserAuthMiddleware::class ]);

laravel还允许为中间件定义别名,并允许在启动文件中批量定义,绑定中间件到路由的方法和原先一样,只是middleware的值变成类中间件的别名,如果要更改中间件时,只需要在定义处修改即可
// 在app.php启动文件中配置路由中间件 /*路由中间件*/ $app->routeMiddleware([ 'http_method_limit' => App\Http\Middleware\UserAuthMiddleware::class ]);

//在路由配置文件web.php中挂载路由中间件 $router->get('user/score', ['middleware' => 'http_method_limit']);

laravel支持全局定义中间件,全局中间件仍然会在路由解析之前被调用,与路由中间件不同的是,它是针对所有http请求,它的定义方法如下
// 在app.php中定义全局中间件 $app->middleware([ App\Http\Middleware\UserAuthMiddleware::class ]);

  • 服务提供者 & 服务容器
    // TODO
其他 【laravel框架泛解】理解依赖注入

    推荐阅读