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 类相关函数的使用详解
May 10 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
php生成二维码时出现中文乱码的解决方法
Dec 18 PHP
php使用curl打开https网站的方法
Jun 17 PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 PHP
PHP的压缩函数实现:gzencode、gzdeflate和gzcompress的区别
Jan 27 PHP
PHP 二维数组和三维数组的过滤
Mar 16 PHP
php简单复制文件的方法
May 09 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
Jun 10 PHP
win10 apache配置虚拟主机后localhost无法使用的解决方法
Jan 27 PHP
php 可变函数使用小结
Jun 12 PHP
thinkphp框架类库扩展操作示例
Nov 26 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中养成7个面向对象的好习惯
2010/01/28 PHP
整理的9个实用的PHP库简介和下载
2010/11/09 PHP
Smarty最简单实现列表奇偶变色的方法
2015/07/01 PHP
php设计模式之装饰模式应用案例详解
2019/06/17 PHP
laravel5.1框架基础之Blade模板继承简单使用方法分析
2019/09/05 PHP
一步一步教你写一个jQuery的插件教程(Plugin)
2009/09/03 Javascript
javascript入门基础之私有变量
2010/02/23 Javascript
基于jQuery的表格操作插件
2010/04/22 Javascript
UI Events 用户界面事件
2012/06/27 Javascript
js实现屏蔽默认快捷键调用自定义事件示例
2013/06/18 Javascript
jquery.qrcode在线生成二维码使用示例
2013/08/21 Javascript
js获取系统的根路径实现介绍
2013/09/08 Javascript
AngularJS服务service用法总结
2016/12/13 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
bootstrap下拉框动态赋值方法
2018/08/10 Javascript
学习node.js 断言的使用详解
2019/03/18 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
Elementui表格组件+sortablejs实现行拖拽排序的示例代码
2019/08/28 Javascript
微信小程序 scroll-view 实现锚点跳转功能
2019/12/12 Javascript
vue 实现把路由单独分离出来
2020/08/13 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
使用Python的判断语句模拟三目运算
2015/04/24 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
python 系统调用的实例详解
2017/07/11 Python
Pycharm导入Python包,模块的图文教程
2018/06/13 Python
树莓派用python中的OpenCV输出USB摄像头画面
2019/06/22 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
tensorflow的计算图总结
2020/01/12 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
到底Java是如何传递参数的?是by value或by reference?
2012/07/13 面试题
活动宣传策划方案
2014/05/23 职场文书
终止劳动合同通知书
2015/04/16 职场文书
JavaScript 定时器详情
2021/11/11 Javascript
Golang实现可重入锁的示例代码
2022/05/25 Golang