12

这个问题困扰了我很长一段时间,我想创建一个 cms,一个更具体的学校管理系统,对我来说最重要的是使这个系统插件基于管理员可以下载的方式并直接通过他们的管理面板安装插件,就像 wordpress 一样。

现在我已经阅读了关于 wordpress HooksActionsFilters的内容,老实说,我可以说我只是对它们的功能有点熟悉,但是要将相同的功能应用于Laravel 应用程序......,这有点难以想象出去,至少对我来说。

我也搜索过这个问题,发现几乎每个人都在建议包,但是虽然包对于其他想要使用包功能的开发人员来说非常有用,但它们不能被不熟悉的用户轻松安装编程语言,这正是我在我的应用程序中想要的。

现在我的想法到目前为止,就像在Wordpress 操作过滤器中一样,几乎所有想要在 Wordpress 主题文件中使用的东西(使那段代码灵活地添加插件功能)都应该被称为函数,并调用它Wordpress do_action() 的函数是一种必经之路,这当然是有道理的。

这样,插件开发人员可以在他们的文件中调用 add_action() / add_filter() 并将他们的插件放入应用程序的流程中。所以...

基本上我在这里问的是:

  • 如何将此类功能应用于 laravel 应用程序?
  • 有没有比通过 do_action() 之类的函数调用所有内容更简单的方法?
  • 我应该编写某种文件管理模块来下载和更新插件吗?

再说一次,我必须说我对实现这种功能的 wordpress 方法不是很熟悉,所以我上面提到的一些描述可能是错误的,但是如果可以的话,我很感激关于这个主题的任何澄清。

提前感谢您的任何见解。

*PS 我试图尽可能地清楚这个问题,而且我没有为我正在开发的系统寻找任何特定的方法。我想知道实现这种功能的常用/最佳方法(如果有最好的方法),最好是在 Laravel 中,但仍然非常感谢通用算法。

我知道很多人有同样的问题并且正在解决同样的问题,所以如果你只提供一个有用的文章的链接,那就太好了。*

4

3 回答 3

9

我作为一名 Wordpress 开发人员已经工作了很长时间,而且我在 Laravel 方面也有足够的经验……老实说,制作这种功能一点也不难。

如何?

首先,您必须了解您将制作的网络应用程序将具有所有功能,但只能从前端(管理面板/仪表板)启用/禁用它们。换句话说,您的学校管理系统应用程序实际上预装了所有特性/功能,但您只是允许用户启用/禁用它。这要简单得多。

所以,如果例如。您想为某人提供attendance management功能,您必须为网站管理员提供启用/禁用它的访问权限。

为什么?

Wordpress 有一个用于添加/更新插件的内置 UI。但是在 Laravel 中,一切都是基于代码的,因此我相信这是最简单的方法(尤其是让你的应用程序中的东西可插入)。

脚步

  1. 使用 UI 等制作网站...
  2. 创建一个配置和迁移文件,其中包含您将允许用户启用/禁用的所有插件的名称。
  3. 制作一个同步命令,将同步您应用中的所有插件。
  4. 使用它从前端渲染页面并从后端管理它们的状态(is_active 等...)
  5. 现在一旦这些插件处于活动状态,请确保用户(例如版主、编辑)有权管理它们,显然您必须为此创建角色/权限并使用Laravel 策略来处理这些内容。
  6. 最后,只有管理员可以启用/禁用写入,其他人没有。

对于您希望人们使用过滤器/操作执行自己的功能的另一部分。我想说这与你所说的部分完全矛盾Installing Laravel Packages isn't easy。好吧,如果您真的希望开发人员能够解决这个问题,为什么不直接要求他们单独为您的应用程序制作一个包呢?嗯....想想看:)

但是,即使那样,如果您想创建这样的功能,请创建一个简单的类,用户可以调用它并使用它的函数来调用他们自己的函数......类似于 -> SMSPlugin::do_action()。但是话又说回来,更新/删除插件之类的事情需要你建立自己的插件商店并要求用户上传。然后你必须创建一个 API 来不断检查所有已安装插件的更新,等等等等……这是一个非常长的过程……而且我也不认为这可行!

希望我回答了一切。如果您有任何疑问,请在评论中告诉我:)

于 2016-11-30T14:46:53.667 回答
3

我知道那是 2 年前的事了,但现在你可以使用 laravel 和一些软件包来实现这一点:

所以我认为步骤将是:

此时,您必须配置和编写一个 UI 来管理提到的每个包中的所有内容。

所以我认为这是或者至少有些人会在 2019 年尝试这样做:D

祝大家新年快乐!

于 2018-12-29T17:00:18.613 回答
0

有一个包,它支持版本 5,尚未使用 6 进行测试: https ://github.com/oneso/laravel-plugins

于 2020-04-06T17:55:13.407 回答