专栏名称: 狗厂
目录
相关文章推荐
广西中公教育  ·  快!2025交通银行广西分行公告发布! ·  昨天  
广西中公教育  ·  快!2025交通银行广西分行公告发布! ·  昨天  
CEO盈利思维  ·  顶级的尊重(建议收藏) ·  昨天  
CEO盈利思维  ·  顶级的尊重(建议收藏) ·  昨天  
广州楼探  ·  实探保利天奕,产品与地段都是加分项 ·  2 天前  
广州楼探  ·  实探保利天奕,产品与地段都是加分项 ·  2 天前  
银行家杂志  ·  3•15特辑 | ... ·  4 天前  
51好读  ›  专栏  ›  狗厂

深入理解 Laravel 管道

狗厂  · 掘金  ·  · 2018-07-24 02:57

正文

这是一篇译文,原文 Understanding Laravel Pipelines 。译文首发于 深入理解 Laravel 管道 ,转载请注明出处。

基本上,你可以使用 laravel 管道(pipelines)基于链式操作将对象传入多个类中执行任何类型的任务,并在所有「任务」执行完成后一次性返回最终结果。

你可以从 Laravel pipelines 获取更多相关知识。

有关管理工作原理的最常见的示例是在框架本身的组件中的使用。我这里说的就是「中间件」。

中间件提供一种方便的机制来过滤发送到应用中的 HTTP 请求...

下面是一个基本的中间件示例:

<?php

namespace App\Http\Middleware;

use Closure;

class TestMiddleware
{
    /**
     * 处理请求
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        // 在这里加入你的代码

        return $next($request);
    }
}

这些「中间件」实际上就是管道通过接受传入的请求,来处理执行所需的任务。在这里你可以来检测当前接受的请求是一个 HTTP 请求、JSON 请求或任何用户认证等工作。

如果你快速浏览过 Illuminate\Foundation\Http\Kernel 类,你会看到中间件是如何在 Pipeline 对象中被执行的。

/**
  * 将请求传入到指定的 中间件/路由。

  * @param  \Illuminate\Http\Request  $request
  * @return \Illuminate\Http\Response
  */
protected function sendRequestThroughRouter($request)
{
    $this->app->instance('request', $request);
    Facade::clearResolvedInstance('request');
    $this->bootstrap();
    return (new Pipeline($this->app))
                    ->send($request)
                    ->through($this->app->shouldSkipMiddleware() ? [] : $this->middleware)
    ->then($this->dispatchToRouter());
}

你可以从这段代码中看到:pipeline 实例将请求发送到一组中间件中,并将其分发到路由器。

如果这段代码对你来说有些手足无措的话请不用担心。我将以一些实例来阐明它的相关概念。

在类中运行多个任务(Working on a class that requires to run multiple tasks)

考虑一下这样的场景。我们需要创建一个允许用户创建话题和留言功能的论坛系统。但客户端在它们创建或编辑时要求你自动删除标签。

下面是你需要做的事情:

  1. 替换文本中的 link 标签。
  2. 使用「*」替换掉敏感词。
  3. 移除文本中的 script 标签。

也许最终你会构建相关的类来处理这些「任务」。







请到「今天看啥」查看全文