美文网首页
Laravel6的Macro和mixin教程

Laravel6的Macro和mixin教程

作者: 前端组件库 | 来源:发表于2020-02-22 23:20 被阅读0次

    简单来说,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;
         }
    }
    
    }
    

    相关文章

      网友评论

          本文标题:Laravel6的Macro和mixin教程

          本文链接:https://www.haomeiwen.com/subject/qqtdqhtx.html