Laravel中使用自己编写类库的3种方法


Posted in PHP onFebruary 10, 2015

虽然Composer使得我们可以重用很多现有的类库(例如packagist.org中的),但是我们仍然可能用到一些不兼容composer的包或者类库。另外在某一项目中,我们也可能会创建某一类库,而且可能并没有制作成为composer package 的打算。这个时候我们可以通过以下方式来使用自己的特有类库。

增加可直接实例化的类

有些需要直接在项目中使用的类,可以通过以下方式增加到Laravel中

1.创建类库文件app/libraries/class/myClass.php
2.写入文件内容

<?php

class Message {

    public static function display() {
    }

}

?>

在app/start/globals.php中增加类导入路径

<?php 

ClassLoader::addDirectories(array(
    app_path().'/commands',

    app_path().'/controllers',

    app_path().'/models',

    app_path().'/database/seeds',

    app_path().'/libaries/class', // 在这里增加
));

?>

在composer.json中增加autoload目录

"autoload": {

    "classmap": [

        "app/commands",

        "app/controllers",

        "app/models",

        "app/database/migrations",

        "app/database/seeds",

        "app/tests/TestCase.php",

        "app/libraries/class"   //在这里增加

    ]

},

1.执行composer dump-autoload来创建导入映射
2.使用自己导入的类直接调用Message::display()即可

这种方法同样也是增加队列类的方法,很多人不知道Laravel中队列处理类应该放在哪里,其实按照上面的方法,在app目录下创建一个queues目录,然后让其可以直接实例化即可

增加可直接调用的函数

有人喜欢用v()来代替var_dump(),想要在Laravel中这么做也非常容易

1.创建一个函数文件app/libraries/function/helper.php
2.写入文件内容

<?php 

function v($msg){

    var_dump($msg);

}

?>

把文件增加到composer自动导入列表中

"autoload": {

   "classmap": [

       ...

   ],

   "files": [

       "app/libraries/function/helper.php"

   ],

},

或者在项目中显示require这个文件。打开app/start/global.php,在末尾增加:

require app_path().'/libraries/function/helper.php';

个人感觉这两种方式都OK,如果想要控制这个文件加载的时间,甚至可以在filter.php文件中增加以下内容
App::before( function( $request ) {

    require( "{$GLOBALS['app']['path.base']}/app/libraries/function/helper.php" );

});

在项目中直接使用函数v('hello world');

增加稍微复杂的类库

有的时候一个类库不仅仅是一个文件那么简单,因此下面的方式更加适合有多个文件多个结构的类库。

创建psr0或者psr4标准的目录结构。

libraries

    Myapp

        Search (note directory is capitalized)

            Search.php

            SearchFacade.php

            SearchServiceProvider.php

        AnotherLib

Myapp/Search/Search.php中Search类的命名空间为Myapp\Search。

修改composer中autoload

"autoload": {

    "classmap": [

        "app/commands",

        "app/controllers",

        "app/models",

        "app/libraries",

        "app/database/migrations",

        "app/database/seeds",

        "app/tests/TestCase.php"

    ]

    ,

    "psr-0": {

         "Myapp": "app/libraries"

    }

},

在项目中使用new Myapp\Search\Search()来实例化某一类

总结

虽然Laravel没有强制哪种方式最好,但是有一定的标准可以使得项目结构清晰,多人合作开发时省去很多交流成本。

PHP 相关文章推荐
Discuz Uchome ajaxpost小技巧
Jan 04 PHP
使用PHP强制下载PDF文件示例
Jan 17 PHP
php获取bing每日壁纸示例分享
Feb 25 PHP
php自动给网址加上链接的方法
Jun 02 PHP
详解YII关联查询
Jan 10 PHP
浅析PHP7新功能及语法变化总结
Jun 17 PHP
Yii中srbac权限扩展模块工作原理与用法分析
Jul 14 PHP
PHP迭代与递归实现无限级分类
Aug 28 PHP
thinkphp5框架实现的自定义扩展类操作示例
May 16 PHP
php输出文字乱码的解决方法
Oct 04 PHP
PHP实现常用排序算法的方法
Feb 05 PHP
如何用RabbitMQ和Swoole实现一个异步任务系统
May 29 PHP
Laravel中使用阿里云OSS Composer包分享
Feb 10 #PHP
PHP实现Javascript中的escape及unescape函数代码分享
Feb 10 #PHP
PHP实现获取FLV文件的时间
Feb 10 #PHP
PHP中实现获取IP和地理位置类分享
Feb 10 #PHP
PHP实现的简单mock json脚本分享
Feb 10 #PHP
PHP实现的带超时功能get_headers函数
Feb 10 #PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 #PHP
You might like
Zend Guard一些常见问题解答
2008/09/11 PHP
php数组去重的函数代码
2013/02/03 PHP
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
十幅图告诉你什么是PHP引用
2015/02/22 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
ExtJs扩展之GroupPropertyGrid代码
2010/03/05 Javascript
jQuery Validation实例代码 让验证变得如此容易
2010/10/18 Javascript
js取两个数组的交集|差集|并集|补集|去重示例代码
2013/08/07 Javascript
jquery获取css中的选择器(实例讲解)
2013/12/02 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
jQuery调用WebMethod(PageMethod) NET2.0的方法
2016/04/15 Javascript
jquery实现tab键进行选择后enter键触发click行为
2017/03/29 jQuery
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
JavaScript设计模式之享元模式实例详解
2019/01/17 Javascript
vue路由对不同界面进行传参及跳转的总结
2019/04/20 Javascript
原生js实现下拉选项卡
2019/11/27 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
[01:51]2014DOTA2西雅图邀请赛 MVP 外卡赛black场间采访
2014/07/09 DOTA
Python logging模块学习笔记
2014/05/24 Python
python文件写入write()的操作
2019/05/14 Python
Python使用ffmpy将amr格式的音频转化为mp3格式的例子
2019/08/08 Python
Python 文件数据读写的具体实现
2020/01/24 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
Python求凸包及多边形面积教程
2020/04/12 Python
浅谈pandas dataframe对除数是零的处理
2020/07/20 Python
高一自我鉴定
2013/12/17 职场文书
我的大学生活职业生涯规划
2014/01/02 职场文书
优秀实习生感言
2014/03/01 职场文书
经销商订货会主持词
2014/03/27 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
孕妇离婚协议书范本
2014/11/20 职场文书
趣味运动会新闻稿
2015/07/17 职场文书
感恩教育主题班会
2015/08/12 职场文书