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 相关文章推荐
php正则
Jul 07 PHP
用PHP控制用户的浏览器--ob*函数的使用说明
Mar 16 PHP
浅析echo(),print(),print_r(),return之间的区别
Nov 27 PHP
php ci框架中加载css和js文件失败的原因及解决方法
Jul 29 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
Oct 31 PHP
php下Memcached入门实例解析
Jan 05 PHP
Yii2 assets清除缓存的方法
May 16 PHP
php自动载入类用法实例分析
Jun 24 PHP
yii2实现 &quot;上一篇,下一篇&quot; 功能的代码实例
Feb 04 PHP
PHP多线程模拟实现秒杀抢单
Feb 07 PHP
Thinkphp5框架ajax接口实现方法分析
Aug 28 PHP
PHP实现倒计时功能
Nov 16 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
PHP Document 代码注释规范
2009/04/13 PHP
用PHP的超级变量$_POST获取HTML表单(HTML Form) 数据
2011/05/07 PHP
codeigniter实现get分页的方法
2015/07/10 PHP
PHP动态生成指定大小随机图片的方法
2016/03/25 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
jQuery获取选中内容及设置元素属性的方法
2014/07/09 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
jquery实现美观的导航菜单鼠标提示特效代码
2015/09/06 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
基于jQuery和CSS3制作数字时钟附源码下载(jquery篇)
2015/11/24 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
JS实现多张图片预览同步上传功能
2017/06/23 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
security.js实现的RSA加密功能示例
2018/06/06 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
ES6 如何改变JS内置行为的代理与反射
2019/02/11 Javascript
JavaScript Reflect Metadata实现详解
2019/12/12 Javascript
归纳整理Python中的控制流语句的知识点
2015/04/14 Python
部署Python的框架下的web app的详细教程
2015/04/30 Python
Python使用xlrd模块操作Excel数据导入的方法
2015/05/26 Python
python使用matplotlib绘制折线图教程
2017/02/08 Python
Python+tkinter使用80行代码实现一个计算器实例
2018/01/16 Python
python绘制地震散点图
2019/06/18 Python
python Tensor和Array对比分析
2020/01/08 Python
pandas 强制类型转换 df.astype实例
2020/04/09 Python
英国哈罗德园艺:Harrod Horticultural
2020/03/31 全球购物
试述DBMS的主要功能
2016/11/13 面试题
市场营销大学生职业规划书
2014/02/25 职场文书
英语专业职业生涯规划范文
2014/03/05 职场文书
法人授权委托书公证范本
2014/09/14 职场文书
学生不参加考试检讨书
2015/02/19 职场文书
专业技术职务聘任证明
2015/03/02 职场文书
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript