Laravel Packages 开发

  Packages是向Laravel中添加功能最重要的途径。composer.json中require的都是包。关于包的详细说明请查看 API . 下面一起创建一个简单的Package :

  1. 环境配置

  我们以Artisan的workbench命令来创建一个Package ,首先要配置 app/confg/workbench.php  

1 <?php
2 
3 return array(
4 
5     'name' => 'brudeke',    
6 
7     'email' => 'xxxxxxxx@163.com',
8 
9 );

 

   2. 创建Package

  其中vendor是厂商名称,用于区别相同名称的包;package是要创建的包名;  

1 php artisan workbench vendor/package --resources

  执行以上命令后会在根目录出现workbench目录,其中workbench/vendor/package/src/Vendor/Package目录下会自动生成PackageServiceProvider.php(以下称此文件为引导类),该文件相当于包的引导类。

  

  3. 在包中添加功能类

  在这里我们在包中添加一个工具类,在“引导类”的同级创建Utils/Turbo.php  

 1 <?php 
 2 
 3 namespace Vendor\Package\Utils;
 4 
 5 use Illuminate\Http\RedirectResponse;
 6 
 7 class Turbo {
 8 
 9     public function __construct() {}
10 
11     public function setUp(){
12         echo "this is a tool";
13     }    
14 }

 

  4. 创建Facades

  Facades的功能就是美化类,可以使成员函数以静态成员的方式调用,在引导类同级创建Facades/Turbo.php  

 1 <?php 
 2 namespace Vendor\Package\Facades;
 3 
 4 use Illuminate\Support\Facades\Facade;
 5 
 6 class Turbo extends Facade {
 7 
 8     protected static function getFacadeAccessor() {
 9         return 'turbo';
10     }
11 }

  

  5. 绑定功能类到Ioc容器

  修改引导类如下,其中$defer是表示延迟加载服务提供器。  

 1 <?php 
 2 namespace Vendor\Package;
 3 
 4 use Illuminate\Support\ServiceProvider;
 5 
 6 class PackageServiceProvider extends ServiceProvider {
 7 
 8     /**
 9      * Indicates if loading of the provider is deferred.
10      *
11      * @var bool
12      */
13     protected $defer = true;
14 
15     /**
16      * Bootstrap the application events.
17      *
18      * @return void
19      */
20     public function boot(){
21         $this->package('vendor/package');
22     }
23 
24     /**
25      * Register the service provider.
26      *
27      * @return void
28      */
29     public function register(){
30         $this->app->bindShared('turbo', function(){
31             return new \Vendor\Package\Utils\Turbo;
32         });
33     }
34 
35     /**
36      * Get the services provided by the provider.
37      *
38      * @return array
39      */
40     public function provides()
41     {
42         return array('turbo');
43     }
44 
45 }

  

  6.修改配置app/config/app.php

  在providers数组中添加以下代码:

1 "providers" => array(
2     'Vendor\Package\PackageServiceProvider',      
3 ),

  在aliases数组中添加别名Turbo:

1 'aliases' => array(
2     'Turbo'            =>  'Vendor\Package\Facades\Turbo',
3 ),

  接下来就可以在项目任何地方以Turbo::setUp()的形式运用包了。

posted @ 2015-01-18 10:10  brudeke  阅读(1760)  评论(0编辑  收藏  举报