PHP Laravel框架中macro方法的扩展功能用法

原创 码农  2020-01-14 14:46:34  阅读 298 次 评论 0 条

Laravel和marco是什么

Laravel是一套优雅而简洁的PHP Web开发框架,Laravel利用php的特性,实现了一套Macroable的Traits,因此引用了Macroable的类都可以用这个方法来扩展,如Response、Request、Collection。

PHP Laravel框架中macro方法的扩展功能用法 PHP Laravel框架中macro方法的扩展功能用法 编程代码

项目背景

本文针对的是使用php的laravel框架。

实际遇到的问题

因业务抽离的原因,拆分了数据库实例,原先项目里一些多对多查询的查询因跨了实例无法用laravel的多对多relation实现。项目中model上层的调用处极多,需求要求短时间内改完。

解决思路

保持model上层调用的地方不变,在model层方法动手。把不能跨实例的多对多方法查询降级为框架支持的一对多或多对一的支持跨实例的查询。Laravel框架用的Eloquent ORM的get方法返回类型是Collection,想办法扩展Collection的功能。

简单的写法如下:

<?php
Collection::macro("macro_name", function ($param1, $param2) {
    
});


为了让整个项目都能使用,将marco的代码放在服务注册提供者里。

如下所示:

app.php里添加

$app->register(App\Providers\CollectionMacroServiceProvider::class);


class CollectionMacroServiceProvider extends ServiceProvider
{
    public function boot()
{
        Collection::macro('macro_name', function () {
            //do something
        });
    }
}

针对需要短时间内修改的需求场景下迫于选择了这种方式,其实更像是补丁的形式,更合理的是需要改上层的数据查询方式。

本文地址:https://www.itcodeit.com/post/51.html
版权声明:本文为原创文章,版权归 码农 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?