Laravel导入自定义扩展类

创建自定义类

app/Extensions 目录下创建一个文件 MyClass.php

1
2
3
4
5
6
namespace App\Extensions;
class MyClass{
public function run(){
return 'Hello world';
}
}

将自定义类添加到Ioc容器

app/Providers 目录下创建一个文件 MyClassServiceProvider.php

1
2
3
4
5
6
7
8
9
10
namespace app\Providers;
use Illuminate\Support\ServiceProvider;
class MyClassServiceProvider extends ServiceProvider{
public function register() {
$this->app['MyClass'] = $this->app->share(
function ($app) {
return new \App\Extensions\MyClass();
});
}
}

实现伪静态方法调用

app/Facades 目录下创建一个文件 MyClassFacades.php

1
2
3
4
5
6
7
namespace app\Facades;
use Illuminate\Support\Facades\Facade;
class MyClassFacades extends Facade{
protected static function getFacadeAccessor(){
return 'MyClass';
}
}

自动加载并声明一个调用别名

app/config/app.php 中的 providers 中添加如下配置:

1
2
3
'providers' => array(
'app\Providers\MyClassServiceProvider'
),

app/config/app.php 中的 aliases 中添加别名:

1
2
3
'aliases' => array(
'MyClass' => 'app\Facades\MyClassFacades',
)

最后我们就可以在自己的项目中用 MyClass::run() 的方式调用自定义类里的函数了。

上面所有的目录路径和文件名都可以根据自己项目的实际结构进行规划,不一定要按照我上面的路径和文件名来,只要你的目录结构不影响你项目的开发即可。

如果想详细了解Facades,可以查看官方文档的介绍。