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 相关文章推荐
关于Intype一些小问题的解决办法
Mar 28 PHP
一步一步学习PHP(8) php 数组
Mar 05 PHP
php下连接ftp实现文件的上传、下载、删除文件实例代码
Jun 03 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
Dec 19 PHP
PHP大小写问题:函数名和类名不区分,变量名区分
Jun 17 PHP
php使用exec shell命令注入的方法讲解
Nov 12 PHP
php显示时间常用方法小结
Jun 05 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
PHP入门教程之会话控制技巧(cookie与session)
Sep 11 PHP
PHP与jquery实时显示网站在线人数实例详解
Dec 02 PHP
Laravel 实现添加多语言提示信息
Oct 25 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 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 foreach循环中使用引用的问题
2013/11/06 PHP
浅谈php自定义错误日志
2015/02/13 PHP
php邮件发送的两种方式
2020/04/28 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
PHP文件上传、客户端和服务器端加限制、抓取错误信息、完整步骤解析
2017/01/12 PHP
yii2实现Ueditor百度编辑器的示例代码
2018/11/02 PHP
在Laravel中实现使用AJAX动态刷新部分页面
2019/10/15 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
JavaScript高级程序设计
2006/12/29 Javascript
自适应高度框架 ----属个人收藏内容
2007/01/22 Javascript
javascript支持firefox,ie7页面布局拖拽效果代码
2007/12/20 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
JQuery select控件的相关操作实现代码
2012/09/14 Javascript
JS控制图片等比例缩放的示例代码
2013/12/24 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
js实现具有高亮显示效果的多级菜单代码
2015/09/01 Javascript
JavaScript数据结构与算法之链表
2016/01/29 Javascript
Node.js实用代码段之正确拼接Buffer
2016/03/17 Javascript
three.js中文文档学习之创建场景
2017/11/20 Javascript
浅谈webpack 自动刷新与解析
2018/04/09 Javascript
利用d3.js制作连线动画图与编辑器的方法实例
2019/09/05 Javascript
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
Python中的lstrip()方法使用简介
2015/05/19 Python
用Python开发app后端有优势吗
2020/06/29 Python
python3实现将json对象存入Redis以及数据的导入导出
2020/07/16 Python
基于HTML5新特性Mutation Observer实现编辑器的撤销和回退操作
2016/01/11 HTML / CSS
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
我想声明一个指针并为它分配一些空间, 但却不行。这些代码有什么 问题?char *p; *p = malloc(10);
2016/10/06 面试题
物业招聘计划书
2014/01/10 职场文书
房地产项目策划书
2014/02/05 职场文书
营销部内勤岗位职责
2014/04/30 职场文书
预备党员期盼十八届四中全会召开思想汇报
2014/10/17 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
合作意向书范本
2019/04/17 职场文书
zabbix如何添加监控主机和自定义监控项
2022/08/14 Servers