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 相关文章推荐
PHP5在Apache下的两种模式的安装
Sep 05 PHP
编写自己的php扩展函数
Oct 09 PHP
兼容性比较好的PHP生成缩略图的代码
Jan 12 PHP
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
php遍历数组的4种方法总结
Jul 05 PHP
php基于base64解码图片与加密图片还原实例
Nov 03 PHP
Thinkphp3.2.3分页使用实例解析
Jul 28 PHP
PHP+jquery+CSS制作头像登录窗(仿QQ登陆)
Oct 20 PHP
PHP基于DOM创建xml文档的方法示例
Feb 08 PHP
phpStudy 2016 使用教程详解(支持PHP7)
Oct 18 PHP
PHP封装的验证码工具类定义与用法示例
Aug 22 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 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
MySQL数据库转移,access,sql server 转 MySQL 的图文教程
2007/09/02 PHP
php 文件状态缓存带来的问题
2008/12/14 PHP
PHP加速 eAccelerator配置和使用指南
2009/06/05 PHP
一波PHP中cURL库的常见用法代码示例
2016/05/06 PHP
PHP执行shell脚本运行程序不产生core文件的方法
2016/12/28 PHP
laravel实现简单用户权限的示例代码
2019/05/28 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
Exjs 入门篇
2010/04/07 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
页面使用密码保护代码
2013/04/10 Javascript
Jquery EasyUI中弹出确认对话框以及加载效果示例代码
2014/02/13 Javascript
html文本框提示效果的示例代码
2014/06/28 Javascript
js+div实现文字滚动和图片切换效果代码
2015/08/27 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
JavaScript判断表单为空及获取焦点的方法
2016/02/12 Javascript
canvas绘制表盘时钟
2017/01/23 Javascript
JS实现侧边栏鼠标经过弹出框+缓冲效果
2017/03/29 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
vue服务端渲染的实例代码
2017/08/28 Javascript
基于vue的短信验证码倒计时demo
2017/09/13 Javascript
js数组去重的N种方法(小结)
2018/06/07 Javascript
微信小程序实现省市区三级地址选择
2020/06/21 Javascript
[00:50]2014DOTA2国际邀请赛 NEWBEE战队回顾
2014/08/01 DOTA
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
python开发之for循环操作实例详解
2015/11/12 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
Python使用进程Process模块管理资源
2020/03/05 Python
荷兰之家英文站:Holland at Home
2016/10/26 全球购物
泰国国际航空公司官网:Thai Airways International
2019/12/04 全球购物
C++面试题:关于链表和指针
2013/06/05 面试题
将"引用"作为函数参数有哪些特点
2013/04/05 面试题
护理专业的自荐信
2013/10/22 职场文书
竞聘自述材料
2014/08/25 职场文书
中学生检讨书范文
2014/11/03 职场文书
2014收银员工作总结范文
2014/12/16 职场文书
pytorch model.cuda()花费时间很长的解决
2021/06/01 Python