Laravel扩展包开发介绍
发布时间
阅读量:
阅读量
Laravel扩展包介绍
使用扩展包作为主要途径,在 Laravel 应用程序中集成功能是一个主流的方式。这些扩展包通常提供了丰富的功能组合。比如时间处理相关的 Carbon 模块。以及像 Behat 这样的测试框架支持模块。
显然按照不同的功能划分成多种类别。有些PHP扩展包完全独立运行,在各种 PHP 框架中无缝集成。Carbon 和 Behat 就是这样的独立扩展包。通过将这些独立运行的PHP扩展包添加到项目中的composer.json文件里就能顺利集成到任何PHP框架中。
另一方面,在某些情况下,某些扩展包仅限于在 Laravel 中使用。这些扩展包通常包括专为增强 Laravel 应用设计的一系列文件。
Step1. 创建目录, 初始化composer.json
mkdir packages/wuwei/package-test # wuwei表示谁的包,package-test表示包名
cd packages/wuwei/package-test
composer init # 按引导填写信息
touch README.md # 描述包功能,使用帮助
mkdir src # 创建源码目录
cd src
touch Test.php TestServiceProvider.php
Step2. 编写包内容
Test.php
<?php
namespace Wuwei\PackageTest;
class Test
{
public function exec()
{
echo 'hello world!';
}
}
TestServiceProvider.php
<?php
namespace Wuwei\PackageTest;
use Illuminate\Support\ServiceProvider;
class TestServiceProvider extends ServicerProvider
{
/** * 在注册后启动服务
*/
public function boot()
{
// todo:
}
/** * 在容器中注册绑定
*/
public function register()
{
// todo:
}
}
composer.json
{
"name": "wuwei/package-test",
"description": "Hello world.",
"type": "library",
"license": "MIT",
"authors": [
{
"name": "linjinwei",
"email": "linjinwei@icloud.com"
}
],
"minimum-stability": "dev",
"require": {},
"autoload": {
"psr-4": {
"Wuwei\ PackageTest\ ": "src/"
}
}
}
Step3. 本地扩展包的使用
- 修改根目录下的composer.json文件
...
"repositories": {
"0": {
"type": "vcs",
"url": "https://git.coding.net/dudukeji/wechat.git"
},
"packagist": {
"type": "composer",
"url": "https://packagist.phpcomposer.com"
},
"wuwei": {
"type": "path",
"url": "/var/www/html/dolife/packages/wuwei/package-test" # 这里必须为绝对路径
}
}
...
- 引入包
composer require wuei/package-test:dev-master # 执行结算之后,会出现在vendor目录中
-
注册到laravel项目中
- 方法一,在config/app.php中添加
...
'providers' => [
...
Wuwei\PackageTest\TestServiceProvider::class,
...
],
...
- 方法二,修改包的composer.json文件(该方式从laravel5.5之后开始支持)
...
"extra": {
"laravel": {
"providers": [
"Wuwei\ PackageTest\ TestServiceProvider"
],
"aliases": {
"facade-name": "Wuwei\ PackageTest\ Facade"
}
}
}
...
Step4. 资源文件
- config
cd packages/wuwei/package-test/src
mkdir config
touch test.config
test.config
<?php
return [
'pakage_name' => 'pakage-test'
];
TestServiceProvider.php
...
public function boot()
{
$this->publishes([
__DIR__.'/config/test.php' => config_path('test.php'),
]);
}
...
# 这样可以在引用的项目里面修改默认的配置项,但是有时候只想修改其中的少量的配置项,可以合并默认配置项
...
public function register()
{
$this->mergeConfigFrom(
__DIR__.'/config/test.php', 'test'
);
}
...
- migrations
cd packages/wuwei/package-test/src
mkdir migrations
cd migrations
touch migrations.php
public function boot()
{
$this->loadMigrationsFrom(__DIR__.'/migrations');
}
- route
cd packages/wuwei/package-test/src
touch routes.php
public function boot()
{
$this->loadRoutesFrom(__DIR__.'/routes.php');
}
- lang
cd packages/wuwei/package-test/src
mkdir translations
cd translations
touch zh.php
public function boot()
{
$this->loadTranslationsFrom(__DIR__.'/translations', 'test'); # test为语言包名
}
# 在项目中使用例子
echo trans('test::messages.welcome');
# test 扩展包中的 messages 文件的 welcome 行
# 可以将语言包发布到应用的resources/lang/vendor目录
$this->publishes([__DIR__.'/translations' => resource_path('lang/vendor/test')]);
- view
public function boot()
{
$this->loadViewsFrom(__DIR__.'/views', 'test');
$this->publishes([
__DIR__.'/views' => resource_path('views/vendor/test'),
]);
}
- command
public function boot()
{
if ($this->app->runningInConsole()) {
$this->commands([
TestCommand::class,
]);
}
}
- assets
public function boot()
{
$this->publishes([
__DIR__.'/assets' => public_path('vendor/test'),
], 'public');
}
# 最后一个参数 public 是资源分类标签
php artisan vendor:publish --tag=public --force # --provider="服务提供者"
Step5.发布拓展包到 packagist
- 将该软件包发布至GitHub,并向composer.json添加/提交相关依赖项,并在版本号上进行升级。
- 将该软件包托管至Packagist平台,并在其中提交详细信息。
在开发基于Laravel的应用过程中,
通常使用的契约(contracts)与facades在功能上是等价的,
它们都能提供基础且相似的可测试功能。需要注意的是,
在开发扩展包时,
扩展包无法访问到Laravel提供的全部测试辅助函数。如果你希望像在Laravel应用中那样编写扩展包的测试案例,
可以使用Orchestral Testbench这一工具来实现。
全部评论 (0)
还没有任何评论哟~
