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(1)
Oct 09 PHP
实用函数5
Nov 08 PHP
php格式化工具Beautify PHP小小BUG
Apr 24 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
PHP结合Jquery和ajax实现瀑布流特效
Jan 07 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
php实现通过soap调用.Net的WebService asmx文件
Feb 27 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
php精度计算的问题解析
Jun 21 PHP
php查看一个变量的占用内存的实例代码
Mar 29 PHP
如何在PHP中使用数组
Jun 09 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 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
《星际争霸II》全新指挥官斯台特曼现已上线
2020/03/08 星际争霸
MOTOROLA 摩托罗拉 MODEL 66-XI五灯中波收音机
2021/03/02 无线电
一个php作的文本留言本的例子(五)
2006/10/09 PHP
php学习笔记 PHP面向对象的程序设计
2011/06/13 PHP
又十个超级有用的PHP代码片段
2015/09/24 PHP
PHP的自定义模板引擎
2017/03/24 PHP
php使用curl伪造来源ip和refer的方法示例
2018/05/08 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
JavaScript mapreduce工作原理简析
2012/11/25 Javascript
jQuery文本框(input textare)事件绑定方法教程
2013/04/24 Javascript
利用javascript实现web页面中指定区域打印
2013/10/30 Javascript
JavaScript中的索引数组、关联数组和静态数组、动态数组讲解
2014/11/08 Javascript
js获取内联样式的方法
2015/01/27 Javascript
简介JavaScript中toTimeString()方法的使用
2015/06/12 Javascript
基于Bootstrap实现图片轮播效果
2016/05/22 Javascript
AngularJS基础 ng-include 指令简单示例
2016/08/01 Javascript
javascript动画之模拟拖拽效果篇
2016/09/26 Javascript
jquery PrintArea 实现票据的套打功能(代码)
2017/03/17 Javascript
JS计算两个时间相差分钟数的方法示例
2018/01/10 Javascript
Vue 中mixin 的用法详解
2018/04/23 Javascript
浅谈AngularJS中$http服务的简单用法
2018/05/15 Javascript
从零开始搭建webpack+react开发环境的详细步骤
2018/05/18 Javascript
使用D3.js+Vue实现一个简单的柱形图
2018/08/05 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
[56:45]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第一局
2016/02/28 DOTA
python中私有函数调用方法解密
2016/04/29 Python
Python闭包的两个注意事项(推荐)
2017/03/20 Python
Pycharm 创建 Django admin 用户名和密码的实例
2018/05/30 Python
python中 * 的用法详解
2019/07/10 Python
Pytorch 保存模型生成图片方式
2020/01/10 Python
英国最大的在线照明商店:Litecraft
2020/08/31 全球购物
请介绍一下Ant
2016/07/22 面试题
大学生毕业自我评价范文分享
2013/11/11 职场文书
预备党员思想汇报1000字
2014/10/07 职场文书
爱国教育主题班会
2015/08/14 职场文书
详解JS ES6编码规范
2021/05/07 Javascript