• 在Laravel中一步一步创建Packages


    首先要看一下Laravel官方文档,这是最新4.2的文档,假设想看中文的话点击此处,基本一样。这个github上的库setup-laravel4-package,也是一步一步介绍怎样创建一个包。并关联相关资源。

    这里以创建一个account包为例:

    1、假设是首次使用php artisan workbench命令,须要配置app/config/workbench.php中的name和email,在生成包的时候会使用这些信息

    2、在项目根文件夹使用。以下的命令生成最初始的包文件夹结构,当中--resources作用是生成相关的view、config和migrations等资源文件夹

    1
    php artisan workbench fstos/account --resources
    

    包的根文件夹在workbench/fstos/account文件夹,其结构大概例如以下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    /src
        /Fstos
            /Account
                AccountServiceProvider.php
        /config
        /lang
        /migrations
        /views
    /tests
    /public
    

    3、将包的'FstosAccountAccountServiceProvider'增加到app/config/app.php中"providers"数组中,这样这个包会被载入到应用程序中

    4、为本包加入独立路由文件,仅仅需在AccountServiceProvider中的boot函数中加入例如以下代码,并在包的根文件夹创建routes.php文件

    1
    2
    3
    4
    5
    public function boot()
    {
        $this->package('fstos/account');
        include __DIR__.'/../../routes.php';
    }

    路由文件例如以下所看到的: 

    1
    2
    3
    Route::get('account/register',  function(){
        return "account register router";
    });

    5、OK,如今在你的浏览器測试吧,出现了"account register router",接下来我们尝试使用controller

    1
    http://localhost/laravel/friends/public/account/register

    6、改动routes例如以下所看到的:

    1
    2
    3
    4
    Route::get('account/register', 
            array('as' => 'account.register.get', 
                'uses' => 'FstosAccountRegistrationController@getRegister')
            );

    7、在controllers 中新建RegistrationController.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
    <?

    php   namespace FstosAccount;   use IlluminateRoutingController as Controller; use IlluminateSupportFacadesView as View; use IlluminateSupportFacadesConfig as Config;   class RegistrationController extends Controller {     /**      * Display the registration form.      *      * @return IlluminateHttpResponse      */     public function getRegister()     {         return "yes,use controller with route in packages!";     }     /**      * 暂用不到      */     protected function setupLayout()     {         if (!is_null($this->layout)) {             $this->layout = View::make($this->layout);         }     }   }

     

    尝试刷新页面。啊哈,是不是报错了,找不到"FstosAccountRegistrationController",Laravel默认是不自己主动查找不论什么文件夹的。须要开发人员自己指定文件的存放文件夹,只是它也给出了建议路径,比方在使用artisan workbench的时候是不是生成了src/controllers文件夹呢。Ok,我们加入自己主动载入路径就可以

    8、在包的根文件夹的composer.json的autoload下classmap字段添加"src/controllers"。并在项目根文件夹执行 php artisan dump-autoload,OKOK,我们刷新页面。哈哈出现啦

    9、接下来我们要使用views文件!嗯嗯。依照我们理解我们仅仅须要改动controller中代码。是滴,例如以下:

    1
    2
    3
    4
    5
        public function getRegister()
        {
            return View::make('account.register');
        //  return "yes,use controller with route in packages!";
        }

    非常显然他訪问的是app/views/account/register.blade.php视图模板。我们创建这个文件并写入例如以下内容:

    1
    2
    3
    <div>
        we are shown in views!
    </div>

    继续刷新页面吧!

    哈哈哈,非常幸运,是这个规则~,只是我们创建一个包并不期望把包中视图放在app/views文件夹吧,是滴,必须得集成到包中。记得src下也有个views呢,好滴好滴。我们把文件放到包src/views/account/register.blade.php中。内容例如以下:

    1
    2
    3
    <div>
        we are shown in views under workbench!
    </div>

    刷新页面吧。我擦。还是原来的页面。是不是Laravel优先加载app/views下的模板文件呢,我们删除app/views/account/。再次刷新页面。又失望了,再次出现了not found页面,在Laravel中。是不会自己主动索引包中的视图文件的,所以我们还须要做一点点工作!

    10、在加载视图的时候指定他去包中寻找视图文件就可以。改动controller中代码例如以下:

    1
    2
    3
    4
    5
        public function getRegister()
        {
            return View::make('account::account.register');
        //  return "yes,use controller with route in packages!";
        }

    再次刷新页面,我们期待的页面出现了。我们看到controller中使用到了account这个命令空间(详细含义能够看下laravel官方文档),那么这个空间是在哪里指定的呢?

    11、我们看下AccountServiceProvider.php文件里boot函数中$this->package('fstos/account');这一行代码,事实上指定了这个包的命令空间和其绑定的文件夹,神马,看不粗来,是滴,这个函数还有第二个(空间名)和第三个(文件夹)參数。只是这个两个參数都有默认值,命名空间的默认值就是account,文件夹默认值就是包根文件夹下的src文件夹,事实上就相当于例如以下写法:

    1
    $this->package('fstos/account',"account",__DIR__.'/../../');

    Ok。你能够去尝试~

    小插曲,从第7条往后写了两遍。第一遍保存的时候登录时间过长,保存丢失了,我勒个去,心中各种骂,想想数据备份是多么的重要~

    这是我第一公布的位置:http://www.fstos.com/index.php/2014-05-26-09-01-36/81-laravel-packages

  • 相关阅读:
    剑指 Offer II 005. 单词长度的最大乘积
    中文编程的瓶颈
    Unity TextMeshPro 富文本格式介绍
    centos使用httpd搭建文件下载服务器教程
    开博第一天
    macOS安装brew(Homebrew国内源)
    git命令将代码导出为单个文件
    CPU虚拟化
    指令
    华为公有云服务的主要服务产品
  • 原文地址:https://www.cnblogs.com/lcchuguo/p/5088754.html
Copyright © 2020-2023  润新知