[版权声明] 本站内容采用 知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆 (CC BY-NC-SA 3.0 CN) 进行许可。
部分内容和资源来自网络,纯学习研究使用。如有侵犯您的权益,请及时联系我,我将尽快处理。
如转载请注明来自: Broly的博客,本文链接: Laravel5开发package实例教程
经过一阵摸索,终于学会了开发Laravel的package,在此做做笔记备忘:-)
本文将以一个简单的实例:文本转图片,做一篇package开发教程。主要功能就是把文本转成图片,再输出到浏览器显示。
课前预备:
- 熟悉Laravel开发
- 了解Laravel运行机制(IoC、DI等)
- 了解服务提供者(Service Providers)
- 了解服务容器(Service Container)
- 了解Facade
以上几点务必要弄懂,不然本文可能会看的不明不白。
测试环境:
- CentOS 7.0
- Nginx 1.8.0
- PHP 5.6.13
- Laravel 5.2
开发步骤:
一、安装最新版的Laravel
目前最新版的是5.2,按步骤安装就行了。
安装教程《Laravel5安装步骤》
二、创建package目录
在Laravel的根目录下创建文件夹结构:
如图中所示,dreamlike文件夹指package的创建者,可以自定义;text2image文件夹指package的名字,可以自定义。
三、初始化composer.json
进入终端,然后进入目录packages/dreamlike/text2image,初始化composer.json,然后按提示操作即可:
1 |
composer init |
然后在目录packages/dreamlike/text2image下可以找到composer.json,内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "name": "dreamlike/text2image", "description": "Convert Text to Image", "license": "MIT", "authors": [ { "name": "Broly", "email": "broly8@qq.com" } ], "minimum-stability": "dev", "require": {} } |
四、修改主composer.json
注意了,这里指的composer.json是Laravel根目录下的,不是刚刚生成的那个(我就在这里吃过亏,搞错了:-()。
在节点"autoload"的子节点"psr-4"下增加内容,如下:
"Dreamlike\\Text2Image\\": "packages/dreamlike/text2image/src"
1 2 3 4 5 6 7 8 9 |
"autoload": { "classmap": [ "database" ], "psr-4": { "App\\": "app/", "Dreamlike\\Text2Image\\": "packages/dreamlike/text2image/src" } }, |
其中,这句话的意思是把命名空间 Dreamlike\\Text2Image\\ 指向目录 packages/dreamlike/text2image/src
然后在终端,Laravel根目录输入:
1 |
composer dump-autoload |
五、创建服务提供者Service Providers
在 packages/dreamlike/text2image/src/ 目录下创建文件夹Providers
在终端,Laravel根目录输入:
1 |
php artisan make:provider Text2ImageServiceProvider |
这样Artisan就会自动帮我们生成一个服务提供者的模板。其中,Text2ImageServiceProvider是服务提供者的名字。
该文件会生成在 app/Providers 目录下,找到这个文件,把它移动到 packages/dreamlike/text2image/src/Providers 目录。
六、创建Facades
在 packages/dreamlike/text2image/src/ 目录下创建文件夹Facades
然后创建文件Text2Image.php,编辑内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?php namespace Dreamlike\Text2Image\Facades; use Illuminate\Support\Facades\Facade; class Text2Image extends Facade { /** * Get the registered name of the component. * * @return string */ protected static function getFacadeAccessor() { return 'text2image'; } } |
七、创建实例类
在 packages/dreamlike/text2image/src/ 目录下创建T2I.php,并编辑内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<?php namespace Dreamlike\Text2Image; class T2I { public function __construct() { } public function make($text) { // 建立一幅 100X30 的图像 $im = imagecreate(200, 30); // 白色背景和蓝色文本 $bg = imagecolorallocate($im, 255, 255, 255); $textcolor = imagecolorallocate($im, 0, 0, 255); // 把字符串写在图像左上角 imagestring($im, 5, 0, 0, $text, $textcolor); // 输出图像 header("Content-Type: image/jpeg"); imagejpeg($im); imagedestroy($im); } } |
八、绑定实例类
编辑文件 packages/dreamlike/text2image/src/Providers/Text2ImageServiceProvider.php ,修改内容为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<?php // 此处改为实际的命名空间 //namespace App\Providers; namespace Dreamlike\Text2Image\Providers; use Illuminate\Support\ServiceProvider; use Dreamlike\Text2Image\T2I; class Text2ImageServiceProvider extends ServiceProvider { /** * Bootstrap the application services. * * @return void */ public function boot() { // } /** * Register the application services. * * @return void */ public function register() { // $this -> app -> singleton('text2image', function($app) { return new T2I(); }); } } |
九、config/app.php中添加服务提供者
安装过Laravel三方包的应该都知道该怎么操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
'providers' => [ // ... /** * Broly: add custom providers */ Dreamlike\Text2Image\Providers\Text2ImageServiceProvider::class, ], 'aliases' => [ // ... /** * Broly: add custom facades */ 'T2I' => Dreamlike\Text2Image\Facades\Text2Image::class, ], |
十、在controller中测试
新建一个controller,在配置路由,测试我们刚刚开发的package是否可用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Http\Requests; use T2I; class HomeController extends Controller { /** * Broly: Home Index * * @param Request $request * @return Response */ public function getIndex(Request $request) { return T2I::make("Dreamlike Blog"); } } |
测试结果:
十一、发布到Github和Packagist
这个读者自己摸索吧,不是很难的。