首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >L4.2扩展/重写出纳以添加税收功能

L4.2扩展/重写出纳以添加税收功能
EN

Stack Overflow用户
提问于 2015-08-30 08:27:53
回答 2查看 371关注 0票数 2

我和收银员一起使用Laravel4.2,我需要修改它的受保护函数buildPayload(),但是我不想直接在供应商文件中这样做,因为当我编写器更新时我可能会破坏代码.我应该如何用我自己的逻辑来重写这个函数?

目前,我在我的一个控制器中使用收银机,方法是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$user->subscription('testplan')
                    ->create(Input::get('stripeToken'), [
                        'email' => 'email@email.com,
                    ]);

但是我想添加一个withTax()参数..。就像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$user->subscription('testplan')
                        ->withTax(10)
                        ->create(Input::get('stripeToken'), [
                            'email' => 'email@email.com,
                        ]);

我已经知道如何在StripeGateway.php文件中直接做这件事了,但这是错误的做法.

我知道我需要补充:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
protected $taxPercent = 0;

    public function withTax($tax)
    {
        $this->taxPercent = $tax;

        return $this;
    }

    protected function buildPayload()
    {
        $payload = [
            'plan' => $this->plan, 'prorate' => $this->prorate,
            'quantity' => $this->quantity, 'trial_end' => $this->getTrialEndForUpdate(),
            'tax_percent' => $this->taxPercent,
        ];

        return $payload;
    }

我不知道的是如何添加这些代码,而不是直接在收银机原始文件中添加。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-30 15:07:14

我自己想出了办法,这是我第一次做这种事.如果我的方法错了,请纠正我!

第一:

我创建了一个名为laravel/app/Lib/Cashier的文件夹,名为Lib\

然后我创建了两个文件:BillableTrait.phpNewStripeGateway.php

BillableTrait.php代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php namespace Lib\Cashier;

use Laravel\Cashier;
use Lib\Cashier\NewStripeGateway as StripeGateway;

trait BillableTrait {
    use Cashier\BillableTrait;

    /**
     * Get a new billing gateway instance for the given plan.
     *
     * @param  \Laravel\Cashier\PlanInterface|string|null  $plan
     * @return \Laravel\Cashier\StripeGateway
     */
    public function subscription($plan = null)
    {
        if ($plan instanceof PlanInterface) $plan = $plan->getStripeId();

        return new StripeGateway($this, $plan);
    }


}

对于NewStripeGateway.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php namespace Lib\Cashier;

use Laravel\Cashier\StripeGateway;

class NewStripeGateway extends StripeGateway {

    protected $taxPercent = 0;

    public function withTax($tax)
    {
        $this->taxPercent = $tax;

        return $this;
    }

    protected function buildPayload()
    {
        $payload = [
            'plan' => $this->plan, 'prorate' => $this->prorate,
            'quantity' => $this->quantity, 'trial_end' => $this->getTrialEndForUpdate(),
            'tax_percent' => $this->taxPercent,
        ];

        return $payload;
    }
}

然后,我编辑了使用类似收银机的模型(只更改了use块):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
use Lib\Cashier\BillableTrait;
use Laravel\Cashier\BillableInterface;

我现在可以直接这样做来设置订阅的税收:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$user->subscription('testplan')
                        ->withTax(10)
                        ->create(Input::get('stripeToken'), [
                            'email' => 'email@email.com',
                        ]);

它工作得很好!!如果我做错了什么,请注意更改,这是我第一次自己挖掘PHP类(特性、扩展等)。

谢谢!

拉斐尔

票数 1
EN

Stack Overflow用户

发布于 2015-08-30 09:38:55

您可以在您的getTaxPercent模型中添加user方法,它也将计算税收。

遗憾的是,没有办法扩展StripeGateway类,因为它在Billable特性中进行了硬编码,您可以做的就是更改这些函数-

在您的public function charge($amount, array $options = []) { return (new StripeGateway($this))->charge($amount, $options); } public function subscription($plan = null) { return new StripeGateway($this, $plan); }类中,这里的问题是您永远不可能知道Billable中会发生什么变化,它们可能会更改函数的名称,并添加少量使用StripeGateway的函数,直到bug出现时,您才会知道。

第一个选项可能要好得多,因为您不需要每次都提到withTax方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32298744

复制
相关文章
Hplus框架动态添加选项卡功能(扩展)
hplus框架确实是后端开发人员的福音,但是有很多功能没有实现,我根据网上大神的做法,实现了动态添加选项卡来打开新页面的功能。
别团等shy哥发育
2023/02/25
7600
Hplus框架动态添加选项卡功能(扩展)
activiti通过扩展点重写节点行为
在activit项目中,有时需要重写节点的behaviour,但如果将代码反编译,会为后续升级,及项目打包带为不方便。   其实 acitivit已经提供了扩展点重写节点行为。 重写办法如下:
星痕
2018/09/12
2.5K0
扩展GridView控件——为内容项添加拖放及分组功能
引言 相信大家对GridView都不陌生,是非常有用的控件,用于平铺有序的显示多个内容项。打开任何WinRT应用或者是微软合作商的网站,都会在APP中发现GridView的使用。“Tiles”提供了一个简单易用,平铺方式来组织内容显示。Windows8的开始菜单是最典型的GridView 示例。“开始菜单”显示了系统中安装的所有应用程序,而且支持重新排列。 本文源于我们项目的开发人员,他们想在项目中提供与GridView相同的用户体验,想要创建类GridView控件。 GridView 可以显示大小不定的内
葡萄城控件
2018/01/10
3K0
扩展GridView控件——为内容项添加拖放及分组功能
手动添加扩展,修改 composer 配置引入扩展
Composer 是 PHP 的一个依赖管理工具。我们可以在项目中声明所依赖的外部工具库,Composer 会帮你安装这些依赖的库文件,有了它,我们就可以很轻松的使用一个命令将其他人的优秀代码引用到我们的项目中来。
OwenZhang
2022/05/30
1.4K0
手动添加扩展,修改 composer 配置引入扩展
python脚本批量修改文件名前言1.批量添加前缀功能2.(扩展)添加移除前缀功能:
我曾以为,写脚本是很难的,直到我遇到了Python 前言 随着国内版权意识的跟进,很多影视音乐资源开始收费,而且度盘又经常随意封杀各种资源,所以,为了保护资源,老司机们越来越倾向于把资源下载到本地,但
zhaoolee
2018/04/19
3K0
python脚本批量修改文件名前言1.批量添加前缀功能2.(扩展)添加移除前缀功能:
对UILabel添加UIMenuController扩展
一、UIMenuController认识 1、默认情况下,UITextView / UITextFiled / UIWebView 都有苹果自带的有UIMenuController功能 二、对UILabel添加UIMenuController扩展 2、新建一个SSCopyLabel,继承UIlabel,.m文件如下: #import "SSCopyLabel.h" @implementation SSCopyLabel - (instancetype)initWithFrame:(CGRect)fram
czjwarrior
2018/05/28
6500
为 jupyterlab 添加 debugger 扩展
jupyterlab 作为 jupyter 的扩展版本,易用性强,结果保存很合理。突然发现可以添加debugger插件,实现在jupyterlab中调试代码,本文记录方法。 基本流程 安装 Anaconda 安装 jupyterlab 安装 node.js 安装 xpython 建立 jupyterlab 工程 搜索并安装插件 使用插件进行debug 具体步骤 安装Anaconda 下载地址: https://www.anaconda.com/products/individual#Downloads
为为为什么
2022/08/05
2.3K0
为 jupyterlab 添加 debugger 扩展
添加相关功能
在BSP.c文件中定义如下三个串口初始化函数,同时将这三行添加到BSP.h文件里,对函数进行声明:
CherishTheYouth
2019/09/11
4340
添加相关功能
Emacs 扩展 Evil 功能
今天在修改代码的过程中,发现有一些地方,想使用多光标来修改,但是在使用的时候,感觉不太会用 evil mc ,中间切换到了 multiple-cursors 包上,但是在 evil 模式下使用,因为模式切换的情况,修改代码的时候会弹出一些奇怪的提示,因为模式的切换的问题,所以又换到了 evil-mc 上。
zucchiniy
2020/05/22
1.7K0
PHP扩展功能--cURL
cURL 表示以命令行的形式请求某个 url, 提交数据或获取相应数据。在日常的程序开发中会用到,因此,了解 cURL 的原理和过程,有助于实际工作和项目中的应用。
程序小工
2018/09/12
6.6K1
PHP扩展功能--cURL
为wordpress增加function模板应用-以后不用修改模板函数添加扩展功能
作者:matrix 被围观: 7,046 次 发布时间:2013-08-09 分类:Wordpress 兼容并蓄 | 2 条评论 »
HHTjim 部落格
2022/09/26
4060
为wordpress增加function模板应用-以后不用修改模板函数添加扩展功能
php7.0添加memcached扩展
根目录使用./configure --prefix=/var/local/lnmp/memcached安装
93年的老男孩
2019/12/18
1.1K0
添加和使用XSLT扩展函数
当出现错误时,XSLT处理器(Xalan或Saxon)执行当前错误处理程序的error()方法,将消息作为参数发送到该方法。类似地,当发生致命错误或警告时,XSLT处理器会根据需要执行datalError()或Warning()方法。
用户7741497
2022/07/05
4.4K0
SkeyeGisMap地图扩展(一)---添加形状
在任何时候都不要直接操作地图节点(即 Map*Node ), 因为地图节点位于渲染线程。
Openskeye
2023/04/24
3390
PHP如何添加内置的扩展
什么时候server上PHP已安装。需要额外补充PHP如何扩展?你并不需要再次安装PHP。同phpize我们可以在原PHP安装扩展直接的基础上,。
全栈程序员站长
2022/07/05
1.3K0
PHP如何添加内置的扩展
添加php的memcached扩展模块
memcached服务直接用yum安装 [root@localhost ~]# yum install memcached 然后启动memcache服务,启动多个实例 [root@localhost ~]# /usr/bin/memcached -d -m 512 -p 11211 -u memcached -c 1024 [root@localhost ~]# /usr/bin/memcached -d -m 512 -p 11212 -u memcached -c 1024 [root@localhos
洗尽了浮华
2018/01/22
1.6K0
添加鼠标画笔功能
//鼠标绘制点横纵坐标 int x = -1; int y = -1; boolean rubber = false;//橡皮 /* * 构造方法 */ public DrawPictureFRame() { setResizable(false); setBounds( 500, 100, 574, 460); setDefaultCloseOperation(EXIT_ON_CLOSE); setTitle("画图程序"); init(); addLis
用户2965768
2019/01/28
5630
添加鼠标画笔功能
Typecho添加维护功能
好吧,最近有一个需求,就是网站有时候会需要维护,对服务器维护啥的,原先typecho的主题Joe是有维护开关的,但是不知道为啥,就取消了...于是自己动手丰衣足食~原理很简单,在主页的index.php加入了一个判断即可
vFREE
2021/12/20
6950
Typecho添加维护功能
Django添加sitemap功能
1、启用sitemap 在django的settings.py的INSTALLED_APPS中添加
緣來
2018/09/18
9600
点击加载更多

相似问题

Apache重写以添加html扩展

11

python:重写导入的类以扩展功能

11

扩展javascript选项以添加功能

20

L4.2 :扩展扩展\TestBase的类

10

扩展ngClick以添加附加功能

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文