Laravel6的Macro和mixin教程

简单来说,laravel的macro就是可以添加到laravel的class里面的静态方法。

例如你可能用过laravel的Illuminate\Support\Str里面的如random的方法。例如:

Str::random(5);

我们可以通过laravel的app\providers\appserviceprovider.php里面的boot方法里面添加。

可以添加方法的macro方法的laravel class列表如下:

Illuminate\Auth\RequestGuard
Illuminate\Auth\SessionGuard
Illuminate\Cache\Repository
Illuminate\Console\Command
Illuminate\Console\Scheduling\Event
Illuminate\Cookie\CookieJar
Illuminate\Database\Eloquent\FactoryBuilder
Illuminate\Database\Eloquent\Relations\Relation
Illuminate\Database\Grammar
Illuminate\Database\Query\Builder
Illuminate\Database\Schema\Blueprint
Illuminate\Filesystem\Filesystem
Illuminate\Foundation\Testing\TestResponse
Illuminate\Http\JsonResponse
Illuminate\Http\RedirectResponse
Illuminate\Http\Request
Illuminate\Http\Response
Illuminate\Http\UploadedFile
Illuminate\Mail\Mailer
Illuminate\Routing\PendingResourceRegistration
Illuminate\Routing\Redirector
Illuminate\Routing\ResponseFactory
Illuminate\Routing\Route
Illuminate\Routing\Router
Illuminate\Routing\UrlGenerator
Illuminate\Support\Arr
Illuminate\Support\Collection
Illuminate\Support\LazyCollection
Illuminate\Support\Str
Illuminate\Support\Testing\Fakes\NotificationFake
Illuminate\Translation\Translator
Illuminate\Validation\Rule
Illuminate\View\Factory
Illuminate\View\View

下面我们直接在Str里面加一个自己的方法,在App\Providers\AppServiceProvider.php文件的boot方法里面:

Illuminate\Support\Str::macro("addString", function($string){
         return "ab-".$string;
});

这样我们就可以通过Illuminate\Support\Str::addString()方法来直接用了。

我们可以看到,macro方法接收的第一个是方法的名称,第二个是一个闭包。

如果我们想加更多的方法都可以这样添加,但是如果我们有很多方法,这个boot里面就很臃肿了。

为了解决这个问题,我们可以把所有的方法分类放到一个文件里,这样mixin就派上用场了。

我们可以做一个class,在class里面放进很多方法,然后在boot方法里,通过mixin这个静态方法来引入。例如:

Str::mixin(new Strmixins());

注意,这里Strmixins是我们自己的class. 这个class如何做呢?

我们可以做一个文件夹在app\Mixins并且做一个class文件。只要我们改写一下刚才的方法到这个class里面即可:

class Mixins{

function addString(){
      return function($string){
           return "ab-".$string;
     }
}

}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 先说几句废话,调和气氛。事情的起由来自客户需求频繁变更,伟大的师傅决定横刀立马的改革使用新的框架(created ...
    wsdadan阅读 8,229评论 0 12
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 7,593评论 0 3
  • 过去做事情急,什么东西拿起来就用,不喜欢进行系统性的学习,造成在使用过程中的错误和低效,现在感觉自己耐心多了,用之...
    马文Marvin阅读 6,104评论 0 10
  • Laravel框架一:原理机制篇 Laravel作为在国内国外都颇为流行的PHP框架,风格优雅,其拥有自己的一些特...
    Mr_Z_Heng阅读 9,171评论 0 13
  • 本文面向php语言的laravel框架的用户,介绍一些laravel框架里面容器管理方面的使用要点。文章很长,但是...
    spacexxxx阅读 4,924评论 0 1