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 相关文章推荐
将OICQ数据转成MYSQL数据
Oct 09 PHP
深入理解:XML与对象的序列化与反序列化
Jun 08 PHP
百度实时推送api接口应用示例
Oct 21 PHP
调试PHP程序的多种方法介绍
Nov 06 PHP
PHP积分兑换接口实例
Feb 09 PHP
PHP多文件上传类实例
Mar 07 PHP
在php和MySql中计算时间差的方法详解
Mar 27 PHP
PHP传值到不同页面的三种常见方式及php和html之间传值问题
Nov 19 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
PHP长网址与短网址的实现方法
Oct 13 PHP
PHP面向对象类型约束用法分析
Jun 12 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 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文本数据库的搜索方法
2006/10/09 PHP
PHP4实际应用经验篇(2)
2006/10/09 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
Avengerls vs Newbee BO3 第二场2.18
2021/03/10 DOTA
准确获得页面、窗口高度及宽度的JS
2006/11/26 Javascript
防止网站内容被拷贝的一些方法与优缺点好处与坏处分析
2007/11/30 Javascript
JS target与currentTarget区别说明
2011/08/28 Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
2011/11/17 Javascript
jQuery中fadeIn、fadeOut、fadeTo的使用方法(图片显示与隐藏)
2013/05/08 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
JavaScript 消息框效果【实现代码】
2016/04/27 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
jquery.flot.js简单绘制折线图用法示例
2017/03/13 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
React Native中TabBarIOS的简单使用方法示例
2017/10/13 Javascript
vue移动端路由切换实例分析
2018/05/14 Javascript
JS插件clipboard.js实现一键复制粘贴功能
2020/12/04 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
用生成器来改写直接返回列表的函数方法
2017/05/25 Python
python实现flappy bird小游戏
2018/12/24 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
python实现递归查找某个路径下所有文件中的中文字符
2019/08/31 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python日志syslog使用原理详解
2020/02/18 Python
jupyter notebook 重装教程
2020/04/16 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
scrapy-splash简单使用详解
2021/02/21 Python
基于css3的属性transition制作菜单导航效果
2015/09/01 HTML / CSS
乔丹诺(Giordano)酒庄德国官网:找到最好的意大利葡萄酒
2017/12/28 全球购物
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
有机婴儿毛毯和衣服:Monica + Andy
2020/03/01 全球购物
小学学习雷锋活动总结
2014/07/03 职场文书
经贸日语专业自荐信
2014/09/02 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
2015年世界艾滋病日活动总结
2015/03/24 职场文书
SpringCloud Function SpEL注入漏洞分析及环境搭建
2022/04/08 Java/Android