【问题标题】:Right approach to building SAAS in Laravel 4在 Laravel 4 中构建 SAAS 的正确方法
【发布时间】:2013-08-19 21:30:09
【问题描述】:

好的,大约一年前,我编写了一个网络应用程序,帮助为我父亲的公司安排约会。他现在“没有它就无法做生意”。我已经决定要建立一个 SAAS 订阅模型,并向公众开放。

它目前是基于 codeigniter 和 php 构建的,我认为这不太适合 SAAS 版本。我计划在 laravel 4 中从头开始重建它,并使用 stripe 作为支付网关。

我关心的是如何最好地为多个客户处理数据库/应用程序结构。目前,它只服务于一项业务,并且非常不抽象,并且专门针对我父亲公司的需求。我需要它能够根据使用它的企业的用途来处理不同的数据。

我研究过多租户,但我不确定这是否适合。我认为“gmail”风格的方法会更好。一个应用程序/域,登录后用户将看到他们的自定义仪表板,并且只有他们的数据。

在我陷入编码困境之前,我需要弄清楚如何最好地处理一个数据库上的多个“帐户”。我不想为每个用户创建一个表,也不想为每个用户创建一个数据库。

我想我的问题是有人能指出正确的方向吗?如何最好地处理 Laravel 中的每月付款订阅?与其说是我纠结的代码,不如说是我需要构建什么来处理每月向客户收费并在计费失败时拒绝他们访问等。

谢谢

【问题讨论】:

    标签: database laravel laravel-4 saas stripe-payments


    【解决方案1】:

    您需要大量阅读和大量工作!

    首先,让我们暂时完全忽略计费方面的问题——归根结底,应用程序的这一部分实际上是相当微不足道的。从37signals Rework(第 93 和 94 页)中取出一个页面,并在您开始实施之前启动您的产品并提供 30 天免费试用(到那时您应该知道如何实施它)。

    其次,为什么你认为“gmail”不使用多租户,URI 结构没有说明底层数据库结构。我相当有信心他们不会为每个客户克隆数据库模式。因此,您可能已经回答了自己的问题 — 您想要实现多租户

    您将想要抽象您的数据库(和应用程序架构),老实说,没有比 Taylor Otwell(Laravel 的创建者)的书 Laravel: From Apprentice To Artisan 更好的资源来帮助您实现这一目标。他的书不适合初学者,当你读完它时,你应该可以自己回答这个问题了。

    您不会为每个用户创建一个表或数据库,甚至不会为每个组织创建一个。相反,您将在代码中创建抽象的数据库结构,这会将您的用户数据从数据库中提取出来。

    考虑将检查访问组织的权限作为用户身份验证的另一层。对于每个请求,您都将检查该用户是否可以访问特定组织。您可能还会检查以确保该组织仍然处于活动状态(它是否因为他们没有付款而过期?)这将再次发生在每个请求上,并且可能会出现filter within laravel

    这确实导致了开发 SaaS 应用程序的下一个非常重要的因素。

    我不了解你,但我很偏执,如果我不确定用户号4506 看不到他不知道的组织的数据,我晚上睡不好觉不属于。确保这一点的唯一真正好方法是通过单元测试,如果您还没有,我强烈建议您学习。

    在 Laravel 4 中最好的方法是阅读 Jeffrey Way 的书 Laravel Testing Decoded。这本书非常先进,但如果你掌握了基础知识,仍然很容易理解。

    最后但并非最不重要的一点是,第一件事是参与社区——我建议这样做的最简单方法是在#laravel IRC channel (freenode) 上闲置。问一些问题,也许回答一些问题,频道中的每个人都非常友善且反应迅速。

    您绝对是在冒险,不要害怕提出问题和犯错误。祝你好运。

    【讨论】:

    • 谢谢,真是一个绝妙的答案。对我来说,这个项目既关乎开发我作为开发人员的技能,也关乎构建产品。我认为这是一个借口,可以使用很多我以前没有的东西和一个游乐场。干杯!
    • 进化的出色回应。我要补充一点,任何 SaaS 最重要的元素是数据结构。如果您开始大量使用并需要快速扩展,那将决定 Saas 的成败。
    • @evolve 你有任何关于同一主题的更新吗?我查看了那些书,但它们已经过时了=/
    • 有很多需要更新,但关键点是:1)你应该使用 Laravel 5(5.2 几天前刚刚发布)和 2)最快最简单的方法来学习你所拥有的一切需要了解在 Laravel 中构建 SaaS 应用程序是 Laracasts.com
    【解决方案2】:

    作为一个粗略的概述,我将有一个客户表和一个订阅表。任何其他需要存储的数据,例如联系人或约会,都可以使用外键关联到客户端表。

    在 laravel 中,您可以使用 ORM 获取当前登录的客户端,然后通过关系,获取属于他们的约会和联系人。

    cartalyst.com 上有一些对 laravel 有用的工具,包括用于用户身份验证的 sentry 和 sentry-social,以及将用户帐户与 facebook/google/twitter 集成等。

    Stripe 将允许您配置定期付款,并在每次尝试付款时通过网络挂钩通知您。您可以将这些记录在支付表中,并将它们与用户/客户相关联。您可以使用它来跟踪谁付款以及最近付款的时间。

    另外,请记住,您可能不想在付款失败后立即取消帐户。

    Stripe 会重新尝试,您最好的反应可能是延迟两三天后,或者您收到无效卡通知,与客户联系并提示他们更新付款详细信息。

    这也可能是一个检查他们上次登录时间的机会。 如果是一个多月前,你可以给他们一个月的免费时间,并提醒他们你的应用可以为他们做多少。 通过这样做,您可以让人们继续使用(并支付)他们忘记订阅的内容。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-25
      • 2013-08-04
      • 2015-04-15
      • 2017-01-31
      • 2012-09-28
      • 1970-01-01
      相关资源
      最近更新 更多