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缩略图生成程式(需要GD库支持)
Mar 06 PHP
解析PHP缓存函数的使用说明
May 10 PHP
PHP中使用memcache存储session的三种配置方法
Apr 05 PHP
ThinkPHP3.1新特性之内容解析输出详解
Jun 19 PHP
php类中的各种拦截器用法分析
Nov 03 PHP
PHP 快速排序算法详解
Nov 10 PHP
php中heredoc与nowdoc介绍
Dec 25 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
Mar 19 PHP
php实现图片转换成ASCII码的方法
Apr 03 PHP
php中序列化与反序列化详解
Feb 13 PHP
php/JS实现的生成随机密码(验证码)功能示例
Jun 06 PHP
php面向对象基础详解【星际争霸游戏案例】
Jan 23 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
最小化数据传输――在客户端存储数据
2006/10/09 PHP
使用php方法curl抓取AJAX异步内容思路分析及代码分享
2014/08/25 PHP
Windows平台实现PHP连接SQL Server2008的方法
2017/07/26 PHP
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
jquery实现在页面加载的时自动为日期插件添加当前日期
2014/08/20 Javascript
基于jquery实现简单的分页控件
2016/03/17 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
js 定位到某个锚点的方法
2016/11/19 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
Vue.js学习笔记之常用模板语法详解
2017/07/25 Javascript
Javascript 实现 Excel 导入生成图表功能
2018/10/22 Javascript
vue实现div拖拽互换位置
2020/07/29 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
微信小程序获取地理位置及经纬度授权代码实例
2019/09/18 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
[05:41]2014DOTA2西雅图国际邀请赛 小组赛7月10日TOPPLAY
2014/07/10 DOTA
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
python 文件和路径操作函数小结
2009/11/23 Python
Python中subprocess模块用法实例详解
2015/05/20 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
解决Python print 输出文本显示 gbk 编码错误问题
2018/07/13 Python
使用tensorflow实现线性svm
2018/09/07 Python
Python读取excel文件中带公式的值的实现
2020/04/17 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
解决pytorch 保存模型遇到的问题
2021/03/03 Python
浅谈css3中的前缀
2016/07/20 HTML / CSS
英国殿堂级有机护肤品牌:Rodial
2017/04/17 全球购物
CheapTickets泰国:廉价航班,查看促销价格并预订机票
2019/12/28 全球购物
大学生大二自我鉴定
2013/10/28 职场文书
商业活动邀请函
2014/02/04 职场文书
毕业生写求职信的要点
2014/03/04 职场文书
乡镇交通安全实施方案
2014/03/29 职场文书
森林防火宣传标语
2014/06/27 职场文书
Element实现动态表格的示例代码
2021/08/02 Javascript