laravel框架泛解

2019-08-15  本文已影响0人  miaoposs

框架目录

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

基本概念

整体结构

简单的框架流程

走通流程

<?php
namespace App\Http\Controllers;
class UserController extends Controller
{
    public function getName()
    {
        return 'sence';
    }
}

我们如何得到这个方法的返回值呢?这里就需要配置路由,让框架根据配置好的路由将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路由详情

首先我们制作好自己的中间件逻辑。可能你对Closure类的作用不是很了解,这里我们先按下不表,只需知道它可以将http请求继续流转到框架的下一个加载流程中就好

<?php
namespace App\Http\Middleware;

use Closure;
/**
 * 访问限制中间件
**/
class UserAuthMiddleware
{

    public function handle($request, Closure $next)
    {
        if (!$request->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
]);

其他

理解依赖注入

上一篇 下一篇

猜你喜欢

热点阅读