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写入WRITE编码为UTF8的文件的实现代码
Jul 07 PHP
php 日期时间处理函数小结
Dec 18 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(三)
Jun 23 PHP
php中base_convert()进制数字转换函数实例
Nov 20 PHP
PHP实现动态web服务器方法
Jul 29 PHP
PHP概率计算函数汇总
Sep 13 PHP
php实现简单爬虫的开发
Mar 28 PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 PHP
thinkphp的dump函数无输出实例代码
Nov 15 PHP
PHP数据库处理封装类实例
Dec 24 PHP
ThinkPHP框架表单验证操作方法
Jul 19 PHP
php修改word的实例方法
Nov 17 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 多进程 解决难题
2009/06/22 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
php防止CC攻击代码 php防止网页频繁刷新
2015/12/21 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
Nigma vs Alliance BO5 第四场2.14
2021/03/10 DOTA
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
js Array操作的最简短最容易理解方法
2013/12/09 Javascript
动态加载jquery库的方法
2014/02/12 Javascript
javaScript使用EL表达式的几种方式
2014/05/27 Javascript
javascript中alert()与console.log()的区别
2015/08/26 Javascript
Vue项目中引入外部文件的方法(css、js、less)
2017/07/24 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
Vue2.0中集成UEditor富文本编辑器的方法
2018/03/03 Javascript
深入理解Node module模块
2018/03/26 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
2018/04/03 Javascript
JavaScript错误处理操作实例详解
2019/01/04 Javascript
Vue父组件如何获取子组件中的变量
2019/07/24 Javascript
利用PHP实现递归删除链表元素的方法示例
2020/10/23 Javascript
python正则中最短匹配实现代码
2018/01/16 Python
基于python实现从尾到头打印链表
2019/11/02 Python
python读取yaml文件后修改写入本地实例
2020/04/27 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
单位单身证明范本
2014/01/11 职场文书
关于青春的演讲稿800字
2014/08/22 职场文书
公司合作协议范文
2014/10/01 职场文书
2015年行政执法工作总结
2015/05/23 职场文书
捐书仪式主持词
2015/07/04 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
MySQL之DML语言
2021/04/05 MySQL
Go语言设计模式之结构型模式
2021/06/22 Golang
Python 中 Shutil 模块详情
2021/11/11 Python
JavaScript最完整的深浅拷贝实现方式详解
2022/02/28 Javascript
Redis 中使用 list,streams,pub/sub 几种方式实现消息队列的问题
2022/03/16 Redis
python函数的两种嵌套方法使用
2022/04/02 Python