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获取远程图片的两种 CURL方式和sockets方式获取远程图片
Nov 07 PHP
php替换超长文本中的特殊字符的函数代码
May 22 PHP
PHP类与对象中的private访问控制的疑问
Nov 01 PHP
深入php 正则表达式的学习探讨
Jun 06 PHP
php采集文章中的图片获取替换到本地(实现代码)
Jul 08 PHP
php单态设计模式(单例模式)实例
Nov 18 PHP
php设计模式之单例模式实例分析
Feb 25 PHP
PHP实现扎金花游戏之大小比赛的方法
Mar 10 PHP
WAMP环境中扩展oracle函数库(oci)
Jun 26 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
Nov 28 PHP
关于ThinkPhp 框架表单验证及ajax验证问题
Jul 19 PHP
Laravel 微信小程序后端搭建步骤详解
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获取301跳转URL简单实例
2013/12/16 PHP
thinkphp关于简单的权限判定方法
2017/04/03 PHP
JavaScript延迟加载
2021/03/09 Javascript
jQuery 各种浏览器下获得日期区别
2008/12/22 Javascript
用JavaScript显示随机图像或引用
2009/04/21 Javascript
javascript级联下拉列表实例代码(自写)
2013/05/10 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
Nodejs极简入门教程(一):模块机制
2014/10/25 NodeJs
javascript函数式编程实例分析
2015/04/25 Javascript
jQuery获取页面及个元素高度、宽度的总结——超实用
2015/07/28 Javascript
node.js操作mongodb简单示例分享
2017/05/25 Javascript
JavaScript之Canvas_动力节点Java学院整理
2017/07/04 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
jQuery实现html可联动的百分比进度条
2020/03/26 jQuery
python基于xmlrpc实现二进制文件传输的方法
2015/06/02 Python
python中import学习备忘笔记
2017/01/24 Python
python3读取excel文件只提取某些行某些列的值方法
2018/07/10 Python
python语音识别实践之百度语音API
2018/08/30 Python
在python中利用最小二乘拟合二次抛物线函数的方法
2018/12/29 Python
python之MSE、MAE、RMSE的使用
2020/02/24 Python
Python使用plt.boxplot() 参数绘制箱线图
2020/06/04 Python
英国最大的割草机购买网站:Just Lawnmowers
2019/11/02 全球购物
逻辑链路控制协议
2016/10/01 面试题
公司庆典活动邀请函
2014/01/09 职场文书
项目合作计划书
2014/01/09 职场文书
技术总监管理岗位职责
2014/03/09 职场文书
大学生社会实践活动总结
2014/07/03 职场文书
2014年班组工作总结
2014/11/20 职场文书
2014年保卫工作总结
2014/12/05 职场文书
张思德观后感
2015/06/09 职场文书
爱护环境建议书
2015/09/14 职场文书
大学班干部竞选稿
2015/11/20 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
Js类的构建与继承案例详解
2021/09/15 Javascript
漫画《尖帽子的魔法工坊》宣布动画化
2022/04/06 日漫