我安装了 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\PagesController
内this line container(通过依赖注入?†)查找的PageModel仍未显示新的drip_delay
字段。
如何覆盖PageModel或执行我需要执行的操作,以便在此“管理”面板视图中显示drip_delay
字段?
†Laravel关于controllers和{{3}}的文档暗示了这一点。
答案 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,
];
}
这就是全部。祝你好运))