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 相关文章推荐
Discuz!5的PHP代码高亮显示插件(黑暗中的舞者更新)
Jan 29 PHP
解决phpmyadmin中缺少mysqli扩展问题的方法
May 06 PHP
php setcookie函数的参数说明及其用法
Apr 20 PHP
PHP基于imap获取邮件实例
Nov 11 PHP
PHP集成百度Ueditor 1.4.3
Nov 23 PHP
thinkphp模板赋值与替换实例简述
Nov 24 PHP
php上传图片类及用法示例
May 11 PHP
JSON两种结构之对象和数组的理解
Jul 19 PHP
PHP7安装Redis扩展教程【Linux与Windows平台】
Sep 30 PHP
Zend Framework入门应用实例详解
Dec 11 PHP
PHP实现的mongoDB数据库操作类完整实例
Apr 10 PHP
原生php实现excel文件读写的方法分析
Apr 25 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
全国FM电台频率大全 - 23 四川省
2020/03/11 无线电
利用PHP和AJAX创建RSS聚合器的代码
2007/03/13 PHP
php中获取关键词及所属来源搜索引擎名称的代码
2011/02/15 PHP
php+js iframe实现上传头像界面无跳转
2014/04/29 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
WordPress迁移时一些常见问题的解决方法整理
2015/11/24 PHP
php使用 readfile() 函数设置文件大小大小的方法
2017/08/11 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
详解PHP中的外观模式facade pattern
2018/02/05 PHP
ie和firefox不兼容的解决方法集合
2009/04/28 Javascript
基于JQuery实现的类似购物商城的购物车
2011/12/06 Javascript
JavaScript中的onerror事件概述及使用
2013/04/01 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
深入分析JQuery和JavaScript的异同
2014/10/23 Javascript
JavaScript把数组作为堆栈使用的方法
2015/03/20 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
最全的Javascript编码规范(推荐)
2016/06/22 Javascript
Javascript的动态增加类的实现方法
2016/10/20 Javascript
在 vue-cli v3.0 中使用 SCSS/SASS的方法
2018/06/14 Javascript
聊聊Vue 中 title 的动态修改问题
2019/06/11 Javascript
Vue组件为什么data必须是一个函数
2020/06/11 Javascript
[05:46]2018完美盛典-《同梦共竞》
2018/12/17 DOTA
Python3.2模拟实现webqq登录
2016/02/15 Python
Python检测网站链接是否已存在
2016/04/07 Python
python利用proxybroker构建爬虫免费IP代理池的实现
2021/02/21 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
纯CSS3实现绘制各种图形实现代码详细整理
2012/12/26 HTML / CSS
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
浅谈HTML5 &amp; CSS3的新交互特性
2016/07/19 HTML / CSS
美国知名保健品网站:LuckyVitamin(支持中文)
2017/08/09 全球购物
德国婴儿服装和婴儿用品购买网站:Baby Sweets
2019/12/08 全球购物
《手指教学》反思
2014/02/14 职场文书
乐观自信演讲稿范文
2014/05/21 职场文书
亲子运动会的活动方案
2014/08/17 职场文书
辞职信的写法
2015/02/27 职场文书
学生会主席任命书
2015/09/21 职场文书