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 相关文章推荐
关于时间计算的结总
Dec 06 PHP
php中用文本文件做数据库的实现方法
Mar 27 PHP
PHP 字符串分割和比较
Oct 06 PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 PHP
php生成静态文件的多种方法分享
Jul 17 PHP
php二维数组排序方法(array_multisort usort)
Dec 25 PHP
PHP中使用Imagick实现各种图片效果实例
Jan 21 PHP
PHP测试成功的邮件发送案例
Oct 26 PHP
CodeIgniter配置之database.php用法实例分析
Jan 20 PHP
PHP中使用foreach()遍历二维数组的简单实例
Jun 13 PHP
phpstorm激活码2020附使用详细教程
Sep 25 PHP
PHP实现腾讯短网址生成api接口实例
Dec 08 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
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
Notice: Undefined index: page in E:\PHP\test.php on line 14
2010/11/02 PHP
PHP中使用CURL伪造来路抓取页面或文件
2011/05/04 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
PHP7.0版本备注
2015/07/23 PHP
PHP查询附近的人及其距离的实现方法
2016/05/11 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
PHP进阶学习之Geo的地图定位算法详解
2019/06/19 PHP
自动检查并替换文本框内的字符
2006/06/30 Javascript
jQuery 解析xml文件
2009/08/09 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
jquery异步跨域访问代码
2013/06/28 Javascript
jquery默认校验规则整理
2014/03/24 Javascript
moment.js轻松实现获取当前日期是当年的第几周
2015/02/05 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
详谈$.data()的用法和作用
2017/02/13 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
PHP webshell检查工具 python实现代码
2009/09/15 Python
详解python开发环境搭建
2016/12/16 Python
Python数据结构与算法之图的最短路径(Dijkstra算法)完整实例
2017/12/12 Python
Python中的二维数组实例(list与numpy.array)
2018/04/13 Python
python中的for循环
2018/09/28 Python
解决.ui文件生成的.py文件运行不出现界面的方法
2019/06/19 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
使用python分析统计自己微信朋友的信息
2019/07/19 Python
Python logging设置和logger解析
2019/08/28 Python
Numpy中对向量、矩阵的使用详解
2019/10/29 Python
Python sep参数使用方法详解
2020/02/12 Python
python+opencv3生成一个自定义纯色图教程
2020/02/19 Python
使用HTML5的表单验证的简单示例
2015/09/09 HTML / CSS
求职自荐书范文
2013/12/04 职场文书
高校十八大报告感想
2014/01/27 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技
Nginx使用ngx_http_upstream_module实现负载均衡功能示例
2022/08/05 Servers