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 相关文章推荐
ajax实现无刷新分页(php)
Jul 18 PHP
编译php 5.2.14+fpm+memcached(具体操作详解)
Jun 18 PHP
PHP取余函数介绍MOD(x,y)与x%y
May 15 PHP
PHP实现无限极分类图文教程
Nov 25 PHP
推荐几个开源的微信开发项目
Dec 28 PHP
Laravel 5 框架入门(三)
Apr 09 PHP
php文件系统处理方法小结
May 23 PHP
PHP之图片上传类实例代码(加了缩略图)
Jun 30 PHP
Yii全局函数用法示例
Jan 22 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
Apr 21 PHP
PHP面向对象类型约束用法分析
Jun 12 PHP
THINKPHP-Apache服务器中使用Alias虚拟目录URL重写 隐藏index.php
Mar 09 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
ThinkPHP中处理表单中的注意事项
2014/11/22 PHP
Thinkphp实现站点静态化的方法详解
2017/03/21 PHP
PHP获取文件扩展名的方法实例总结
2017/06/10 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
JavaScript 指导方针
2007/04/05 Javascript
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
拖动table标题实现改变td的大小(css+js代码)
2013/04/16 Javascript
Extjs改变树节点的勾选状态点击按钮将复选框去掉
2013/11/14 Javascript
js计算两个时间之间天数差的实例代码
2013/11/19 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
2014/08/08 Javascript
JavaScript中Cookies的相关使用教程
2015/06/04 Javascript
javascript实现相同事件名称,不同命名空间的调用方法
2015/06/26 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
jquery图片放大镜效果
2017/06/23 jQuery
bootstrap实现二级下拉菜单效果
2017/11/23 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
在react中使用vue的状态管理的方法示例
2020/05/02 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
mvc框架打造笔记之wsgi协议的优缺点以及接口实现
2018/08/01 Python
python 对类的成员函数开启线程的方法
2019/01/22 Python
Python Datetime模块和Calendar模块用法实例分析
2019/04/15 Python
在pycharm下设置自己的个性模版方法
2019/07/15 Python
Python matplotlib读取excel数据并用for循环画多个子图subplot操作
2020/07/14 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
HTML5+CSS3 诱人的实例:3D立方体旋转动画实例
2016/12/30 HTML / CSS
css3 clip实现圆环进度条的示例代码
2018/02/07 HTML / CSS
使用HTML5 Canvas API绘制弧线的教程
2016/03/22 HTML / CSS
家长学校培训材料
2014/08/20 职场文书
2014年大学生党员自我评议
2014/09/22 职场文书
2014年师德师风工作总结
2014/11/25 职场文书
绍兴鲁迅故居导游词
2015/02/09 职场文书
十大公认最好看的动漫:《咒术回战》在榜,《钢之炼金术师》第一
2022/03/18 日漫
MongoDB误操作后使用oplog恢复数据
2022/04/11 MongoDB
windows系统安装配置nginx环境
2022/06/28 Servers