php - 如何覆盖 PyroCMS(Laravel,PHP)中的模型类?
问题描述
我安装了PyroCMS并将其扩展为一个学习管理系统(LMS),只有登录的用户可以查看页面,并且页面也只能在用户注册课程后的可变天数开始查看.
(即,模块 1 的第 1 课可以解锁并立即可见,但第 2 课可以配置为隐藏到 1 天后,第 3 课可能会在 X 天后变得可见,等等)
我是如何通过这个迁移编写一个 Laravel 包来实现这一点的:
Schema::table('pages_pages', function (Blueprint $table) {
$table->string('drip_delay')->nullable()->after('str_id');
});
然后我在函数中创建了一个DrippablePagesServiceProvider
类:boot()
$this->app->bind('Anomaly\PagesModule\Http\Controller\PagesController', 'me\DrippablePages\PagesController'); //https://laravel.com/docs/5.6/container#binding
我将自定义设计PagesController
为在登录用户过早尝试访问页面时显示特殊视图。此功能一切正常。
但是drip_delay
,与其像我一直在做的那样直接在数据库中编辑该字段,我更希望能够在 /admin/pages/edit/4 URL 的其他字段旁边进行编辑。
我很确定我需要覆盖 PagesModule 的各个部分,例如 PageEntryFormSections ( doc )。我想我有这个工作。
但是当逐步使用 Xdebug 时,我看到在此行中查找的 PageModel (通过依赖注入?†)仍然没有显示我的新edit()
字段。Http\Controller\Admin\PagesController
drip_delay
如何覆盖 PageModel 或做任何我需要做的事情,以便drip_delay
在此管理面板视图中显示该字段?
解决方案
要首先覆盖模型,您需要一个新模型来扩展您要覆盖的模型:
<?php namespace Ryan\ExtenderModule\Post;
class PostModel extends \Anomaly\PostsModule\Post\PostModel
{
}
然后在里面ServiceProvider
你需要把它颠倒过来:
<?php namespace Ryan\ExtenderModule;
use Anomaly\PostsModule\Post\PostModel;
use Anomaly\Streams\Platform\Addon\AddonServiceProvider;
class ExtenderModuleServiceProvider extends AddonServiceProvider
{
protected $bindings = [
PostModel::class => \Ryan\ExtenderModule\Post\PostModel::class,
];
}
就这样。祝你好运 ))
推荐阅读
- ldap - 在 LDAP3 中获取“memberOf”搜索特定用户
- python-3.x - 用 NaN 填充条件后的值
- mysql - 表情符号未使用 mysql 和 node 保存在数据库中
- python - 使用 Python 从任务栏中识别和打开程序
- python - 在 Elasticsearch dsl 中分析每个帖子的单个标签
- amazon-web-services - AWS - 使用网络 ACL 限制到 SaaS 服务的出站流量
- php - 使用 mysql php 进行全文搜索
- java - Kotlin:java.lang.RuntimeException:无法创建类 com.app.datastorepreferences.MyViewModel 的实例
- amazon-web-services - 该参数未应用于 sam 模板
- java - java.io.IOException:无效的密钥库格式/无法识别的密钥库格式。使用旧的 android 密钥库时,请以指定的类型加载它