Laravel 创建包和制作包使用
本文目录
laravel 包制作
包制作发,方便我们把轮子制作好之后,打包出来,多个项目公用。
包制作流程
- 创建一个包存放目录
- 创建包的要实现的主类
- 创建门面类
- 创建提供者类
- 创建辅助文件:配置文件,数据库迁移文件,路由文件,资源文件,视图文件等。
- 包引入发现
- 发布到 https://packagist.org/
如果一个简单的类制作包,只需要4个步骤
- 创建一个包存放目录
- 创建包的要实现的主类
- 创建提供者类
- 包引入发现
创建一个包存放目录
例如我们创建包的路径在根目录下/packages/ 。
这个时候我们需要想个名字,比如我这个叫 Hello
包,那么我需要包前面加个作者的包名称,那么可以是kongqi/hello/
.所以我们建立一个文件夹
/packages/kongqi/hello/src/
创建包的要实现的主类
在 src
下创建 Hello.php
<?php
namespace Kongqi\Hello;
use Illuminate\Config\Repository;
class Hello
{
protected $config;
public function __construct(Repository $config)
{
$this->config=$config->get('hello');
}
public function toSay(){
return 'hello Test';
}
}
创建提供者类
提供者一般用于我们注册包时所需要的环境,差不多就是要告诉系统,我这个包需要那些辅助来帮我完成。我们先建一个文件packages/kongqi/hello/src/HelloProvider.php
<?php
namespace Kongqi\Hello;
use Illuminate\Support\ServiceProvider;
class HelloProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
}
}
假设包我需要一个配置文件,我们
boot
里面执行操作
public function boot()
{
// 发布配置文件
$this->publishes([
__DIR__.'/config/hello.php' => config_path('hello.php'),
],'config');
}
其中 config
是一个组名称,也就是 tag
标签这样子
扩展包默认配置合并一起,写在 register
下
$this->mergeConfigFrom(
__DIR__.'/config/hello.php', 'config'
);
假设包我需要一个数据库迁移
public function boot()
{
$this->loadMigrationsFrom(__DIR__ . '/database/migrations');
//发布迁移文件
$this->publishes([
__DIR__.'database/migrations/' => database_path('migrations')
], 'migrations');
}
路径存在于 packages/kongqi/hello/src/database/migrations/
下,正常写迁移文件即可
假设包我需要注册路由
public function boot()
{
$this->loadRoutesFrom(__DIR__ . '/routes/api.php');
}
路径存在于 packages/kongqi/hello/src/routes/api.php
下,正常写路由文件即可
视图
public function boot()
{
$this->loadViewsFrom(__DIR__.'/views', 'hello');
}
//发布视图
$this->publishes([
__DIR__.'/views' => resource_path('views/vendor/hello'),
]);
其中 hello
是包名的名称
语言包
public function boot()
{
$this->loadTranslationsFrom(__DIR__.'/lang', 'hello');
//发布语言包,发布其实就是迁移路径
$this->publishes([
__DIR__.'/lang' => resource_path('lang/vendor/hello'),
]);
}
其中 hello
是包名的名称
调用
echo trans('hello::messages.welcome');
公共资源文件
public function boot()
{
$this->publishes([
__DIR__.'/assets' => public_path('vendor/hello'),
], 'public');
}
创建门面
packages/kongqi/hello/src/Facades/Hello.php
创建
<?php
namespace Kongqi\Hello\Facades;
use Illuminate\Support\Facades\Facade;
class Hello extends Facade
{
protected static function getFacadeAccessor()
{
return 'hello';
}
}
以上是构建类所需要的一些方法
如果我们里面还需要辅助函数
可以创建一个 helpers.php
即可,最后我们需要在 composer.json
里面引入它即可
注册包到app.php里面
'providers' => [
...
Kongqi\Hello\HelloProvider::class,
],
'aliases'=>[
...
'Hello'=>\Kongqi\Hello\Facades\Hello::class
]
执行相关迁移文件
php artisan vendor:publish
执行选择即可完成。
创建composer文件
路径在包下面
{
"name": "kongqi/hello",
"description": "包学习制作",
"license": "MIT",
"authors": [
{
"name": "kongqi",
"email": "531833998@qq.com"
}
],
"autoload": {
"psr-4": {
"Kongqi\\Hello\\": "src"
}
},
"require": {}
}
如果刚才我们还引入了helpers
.php文件,需要改成如下
{
"name": "kongqi/hello",
"description": "包学习制作",
"license": "MIT",
"authors": [
{
"name": "kongqi",
"email": "531833998@qq.com"
}
],
"autoload": {
"psr-4": {
"Kongqi\\Hello\\": "src"
},
"files": [
"src/helpers.php"
]
},
"require": {},
"extra": {
"laravel": {
"providers": [
"Kongqi\Hello\HelloProvider"
],
"aliases": {
"Hello": "Kongqi\Hello\Facades\Hello"
}
}
}
}
这样我们就完成包的整个制作了,后面就是上传包到 https://packagist.org/
里面了。这个操作不再累赘。
版权提示
1.除了标识原创之外,其他可能来源于网友的分享,仅供学习使用2.如您发现侵犯了您的权利,请联系我们删除
3.转载必须带本文链接,否则你将侵权
4.关于会员或其发布的相关内容均由会员自行提供,会员依法应对其提供的任何信息承担全部责任,本站不对此承担任何法律责任