如何覆盖PyroCMS中的模型类(Laravel,PHP)?

时间:2018-05-24 22:00:25

标签: php laravel eloquent pyrocms

我安装了 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网址。

我很确定我需要覆盖PagesModule的各个部分,例如PageEntryFormSections(doc)。我认为我有这个工作。

但是当使用Xdebug时,我发现在edit() Http\Controller\Admin\PagesControllerthis line container(通过依赖注入?†)查找的PageModel仍未显示新的drip_delay字段。

如何覆盖PageModel或执行我需要执行的操作,以便在此“管理”面板视图中显示drip_delay字段?

†Laravel关于controllers和{{3}}的文档暗示了这一点。

1 个答案:

答案 0 :(得分:2)

要首先覆盖模型,您需要一个新的模型来扩展您想要覆盖的模型:

<?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,
    ];
}

这就是全部。祝你好运))