在 Laravel 4 中构建 SAAS 的正确方法

2023-12-20

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

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

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

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

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

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

Thanks


你需要大量的阅读和大量的工作!

首先,让我们暂时完全忽略计费方面 - 归根结底,应用程序的这一部分确实相当微不足道。取出一页37信号Rework http://37signals.com/rework(第 93 和 94 页)并在开始实施之前启动您的产品并提供 30 天免费试用(那时您应该知道如何实施)。

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

您将想要抽象您的数据库(和应用程序架构),老实说,没有比 Taylor Otwell(Laravel 的创建者)的书更好的资源来帮助您实现这一目标了。Laravel:从学徒到工匠 https://leanpub.com/laravel。他的书不适合初学者,当你读完它时,你应该能够自己回答这个问题。

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

考虑检查访问组织的权限作为用户身份验证的另一层。对于每个请求,您都将检查该用户是否可以访问特定组织。您可能还会检查以确保该组织仍然处于活动状态(是否因为他们没有付款而过期?)这将在每次请求时再次发生,并且可能会出现以下情况:Laravel 内的过滤器 http://laravel.com/docs/routing#route-filters.

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

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

在 Laravel 4 中执行此操作的最佳方法是阅读 Jeffrey Way 的书Laravel 测试解码 https://leanpub.com/laravel-testing-decoded。这本书非常先进,但如果你很好地掌握了基础知识,仍然很容易理解。

最后但并非最不重要的一点是,最重要的一件事是参与社区——我建议最简单的方法就是闲逛#laravel IRC 频道 http://laravel.io/irc(自由节点)。问一些问题,也许回答一些问题,频道中的每个人都非常友善且反应灵敏。

您肯定会经历一次冒险,不要害怕提出问题和犯错误。祝你好运。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Laravel 4 中构建 SAAS 的正确方法 的相关文章

  • 如何通过逗号分隔将 2 行合并为一行?

    我需要将这些单独的行合并到一列 我现在如何通过逗号分隔合并列 CID Flag Value 1 F 10 1 N 20 2 F 12 2 N 23 2 F 14 3 N 21 3 N
  • 如何在查询中生成序列号?

    我们使用 PostgreSQL v8 2 3 如何在查询输出中生成序列号 我想显示查询返回的每一行的序列号 例子 SELECT employeeid name FROM employee 我希望生成并显示从一开始的每一行的序列号 你有两个选
  • 产品和变体 - 设计数据库的最佳方法

    描述 商店可以有产品 鞋子 T 恤等 每个产品可以有许多变体 每个变体可以有不同的价格和库存 例如T 恤有不同的颜色和尺寸 颜色 蓝色 尺寸 L 价格 10 美元 库存 5 颜色 蓝色 尺寸 XL 价格 10 美元 库存 10 颜色 白色
  • 如何解析 Google Alerts 中的数据?

    首先 除了解析 Google 发送给您的电子邮件文本之外 您如何将 Google Alerts 信息存入数据库 似乎没有 Google Alerts API 如果您必须解析文本 您将如何解析电子邮件的相关部分 创建警报时 将 传送至 设置为
  • 如何在Oracle数据库11g中创建新模式/新用户?

    我已经申请了一家公司的实习机会 作为一个问题 他们要求我为他们的公司创建一个具有一定要求的架构 并将DDL文件 我已经安装了 Oracle 数据库 11g Express 版本 但如何在 Oracle 数据库 11g 中创建新架构 我在网上
  • 使用 Laravel Fluent 查询生成器从多个表中进行选择

    我正在重写一些 PHP MySQL 来与 Laravel 一起使用 我想做的一件事是使数据库查询更加简洁使用 Fluent 查询生成器 http laravel com docs database fluent但我有点迷失 SELECT p
  • Python 中的 Firebase 身份验证时出现 KeyError:“databaseURL”

    相信你做得很好 我是 firebase 的新手 正在尝试进行用户身份验证 我已经安装了pyrebase4并在firebase控制台上创建了一个项目 我还启用了使用 电子邮件和密码 登录并尝试连接我的应用程序 下面是我正在尝试的代码 impo
  • Laravel中with()和compact()有什么区别

    功能有什么区别with and compact 在 Laravel 中这两个例子 示例1 return View make books index gt with booksList booksList 示例2 return View ma
  • Python Twisted 和数据库连接

    我们的工作项目包括同步应用程序 短期 和异步 Twisted 应用程序 长期 我们正在重构我们的数据库 并将构建一个 API 模块来解耦该模块中的所有 SQL 我想创建该 API 以便同步和异步应用程序都可以使用它 对于同步应用程序 我希望
  • Laravel 资源策略始终为 false

    我试图允许用户在 Laravel 5 4 中查看自己的个人资料 用户策略 php public function view User authUser user return true 在 AuthServiceProvider php 中
  • 如何列出表中的所有列?

    对于各种流行的数据库系统 如何列出表中的所有列 对于 MySQL 请使用 DESCRIBE name of table 只要您使用 SQL Plus 或 Oracle 的 SQL Developer 这也适用于 Oracle
  • python 没有名为serial的模块

    我的 python 程序有问题 我编写了程序来将数据 温度 从 arduino 获取到我的树莓派 sqlite 数据库 但它在第 4 行 导入串行 处给了我一个错误 提示 ImportError 没有名为串行的模块 我使用 python3
  • 使用 Laravel dusk 仅迁移一次

    根据到 数据库测试 文档 https laravel com docs 5 4 database testing resetting the database after each test我可以在每次测试后重置数据库 第一个选项 第二个选
  • 编程错误:(psycopg2.errors.UndefinedColumn)关系“task_fail”的列“execution_date”不存在

    我正在尝试在气流中运行 DAG 以将数据集摄取到谷歌云存储 这是 DAG 脚本 import os from airflow import DAG from airflow utils dates import days ago from
  • Laravel MySQL 按计数排序

    我正在使用 Laravel 和 MySQL 并且我有一个表post代表用户可以评论的帖子 现在我想按照每个帖子的评论数量按升序 降序对帖子进行排序 我该如何在 Laravel 中执行此操作 我不想添加字段post表来跟踪每个帖子的评论数量
  • 用嘲笑测试 Laravel 外观总是会通过,即使它应该失败

    我试图在单元测试期间模拟 Laravel 中的一些外观 但似乎无论如何测试总是会通过 例如 此示例取自 Laravel 文档 Event shouldReceive fire gt once gt with foo array name g
  • 术语 SSTable 和 LSM Tree 之间有什么区别

    这两个术语可以互换使用吗 我读过有关 SSTable 工作原理的文章 通常文章都会开始提到 LSM Tree 然而 它们似乎是同一件事 我什么时候应该使用一个术语而不是另一个术语 对于凡人来说 SSTables 和 LSM Trees 的最
  • Laravel 转义 Blade 模板中的所有 HTML

    我正在 Laravel 中构建一个小型 CMS 并尝试显示内容 存储在数据库中 它显示 HTML 标签而不是执行它们 就像所有打印数据都有一个自动 html entity decode 一样
  • @apply 在 Laravel Mix 中的 Vue 组件内不起作用

    我在 Laravel 中使用 Tailwind CSS 和 VueJS 组件 如下所示
  • 将 Access 数据库转换为 SQL Microsoft DTS - 数据类型“130”不在映射文件中

    我正在尝试将大型 Access mdb 数据库导出到 SQL Server 数据库 但遇到了 Microsoft DTS 无法识别 Access 数据库中特定类型字段的数据类型的问题 我查看了相关的访问表 它们被设置为长度为 1 的 文本

随机推荐

  • 我可以在改造方法声明中使用可变参数吗?

    我有一个 API 端点 定义为 GET https api server com something id or ids where ids可以是一个单个对象 IDor以逗号分隔的 ID 列表 e g https api server co
  • uint 数据类型的 ODP .NET 参数问题

    从本机 NET oracle 数据提供程序更新到 Oracle ODP NET 后 我遇到了以下问题 我有一个存储过程 它是包的一部分 它接受 32 个参数 除了一个指定为 OUT 参数之外 全部为 IN 参数 无论如何 这是我遇到的问题
  • Android Gcm 接收器/Gcm 侦听器服务在接收时强制应用程序到前台

    我在 Android 最低 SDK 15 上实现 GCM 时遇到了问题 我完全能够接收来自 GCM 的推送通知 并且我的GcmListenerService实施已发挥作用onMessageReceived 打回来 但我的问题是 每当一个或另
  • 如何在 Spring IoC XML 配置中从 web.xml 获取显示名称

    准确地说 我怎样才能得到的值
  • 我可以将 UIToolbar 项目居中吗?

    我正在 UIToolbar 上放置一个标签 根据此提示 将 UILabel 添加到 UIToolbar https stackoverflow com questions 333441 adding a uilabel to a uitoo
  • 使用 ACCOUNT_FORMS 覆盖 Django allauth 登录表单

    我已经用简单的设置变量覆盖了注册表单ACCOUNT SIGNUP FORM CLASS但要覆盖您需要使用的登录表单ACCOUNT FORMS login yourapp forms LoginForm 我有我想要的表单 并且它可以通过 Cr
  • Java对象的内存分配过程的步骤

    当一个类实例化以下对象时 内存中会发生什么 public class SomeObject private String strSomeProperty public SomeObject String strSomeProperty th
  • 如何区分USB设备类型?

    读完后这个问题 https stackoverflow com questions 68749 working with usb devices in net关于使用 USB 设备 我想知道操作系统使用什么方法来区分 USB 设备类型 例如
  • 重新映射键的热键不会触发热字符串

    我有一个热键和热字符串似乎不能一起工作 9 ob0 left 1 为了提供一些上下文 在代码的一部分中 我将所有符号重新映射到它们下面的数字 反之亦然 所以9打印括号 后来 我放置了一个热字符串 该热字符串将在左括号后键入右括号 然后将光标
  • 如何制作具有最小高度的可扩展div

    如果我有一个高度 100 和宽度 100 的div 它的背景颜色将主要取决于浏览器的高度和宽度 但是 如果该 div 内的内容动态增长 则该 div 将不会根据内容扩展 文本将重叠并流过该 div 另一方面 如果我将 min height
  • 将“任何 CPU/首选 32 位”设为 VS 中的默认构建设置背后的基本原理

    假设在 x64 Windows 机器上使用最新版本的 Visual Studio 和 C 并分配大量数据 果然 当使用默认构建设置进行编译时 如下图所示为 VS 2019 Preview 2 1 当进程达到 4 GB 时 您将耗尽用户虚拟地
  • 多线程性能超越核心

    如果我有一个启动的进程X线程数量 是否会有性能增益X高于数量CPU核心 假设所有线程都同步工作 没有对存储 网络的异步调用 例如 如果我有两个核心CPU 我会减慢应用程序启动 3 个以上持续工作线程的速度吗 这实际上取决于您的代码的作用 它
  • gitignore 不忽略文件夹

    在我的项目的根目录中我有一个foo文件夹 在 的里面foo文件夹我有一个bar文件夹 我想忽略对我的内部所有文件的所有更改bar文件夹 我的里面有这个gitignore foo bar 检查该文件夹 它存在并且包含要忽略的文件 gitign
  • 此版本的 Microsoft.AspNetCore.All 仅与 netcoreapp2.1 目标框架兼容

    当我从 2 0 升级到 NET Core 2 1 后尝试将应用程序发布到 Web 服务器时 收到以下消息 此版本的 Microsoft AspNetCore All 仅与 netcoreapp2 1 目标框架兼容 请以 netcoreapp
  • 在 DOM 元素上调用自定义方法

    我想在 DOM 元素上调用自定义方法 像这样 div div 我该如何开发这个问题 是否有必要使用jQuery 您不需要使用 jQuery 您可以使用document getElementById MyObject 获取 DOM 节点的引用
  • 加载库 193

    我正在创建一个 C CLI dll 它将加载到旧版 C 应用程序中 遗留应用程序通过传统的 LoadLibrary 调用来完成此操作 应用程序和 C CLI dll 均以 64 位模式编译 当发生 LoadLibrary 调用时 它会失败并
  • Rails 中的社交网络 - 哪个框架

    我应该使用 社区引擎 Insoshi 少爱 轨道空间 自己卷 我希望快速建立一个支持移动浏览的社交网络 虽然我熟悉 Ruby 和 Rails 但我不是专家 已经构建了一些基本的 Rails 应用程序 已经编写了一堆用于企业集成的 Ruby
  • 创建方案 .avsc Avro 时出现问题

    我在创建 avro 方案时遇到问题 下面我将放置我的方案 推特 avsc type record name twitter schema namespace com miguno avro fields name id type recor
  • 发送 X11 点击事件不适用于某些窗口

    以下代码片段在大多数情况下都有效 除了在某些窗口中 例如 在最新的 Ubuntu 下 它无法在文件资源管理器中选择文件夹 它似乎在其他地方都适用 但这个差距是巨大的 我怀疑这与我使用 XQueryPointer 的方式有关 但我已经尝试了几
  • 在 Laravel 4 中构建 SAAS 的正确方法

    好吧 大约一年前 我编写了一个网络应用程序 可以帮助为我父亲的公司组织约会 现在他 没有它就无法做生意 我决定建立一个 SAAS 订阅模式并向公众开放 它目前基于 codeigniter 和 php 构建 我认为这不太适合 SAAS 版本