如何覆盖PyroCMS中的模型类(Laravel,PHP)?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何覆盖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('AnomalyPagesModuleHttpControllerPagesController', 'meDrippablePagesPagesController'); //https://laravel.com/docs/5.6/container#binding
我设计了我的自定义PagesController
,以便在登录用户尝试过早访问页面时显示特殊视图。这个功能完全正常。
但是我没有像我一直在数据库中直接编辑drip_delay
字段,而是希望能够在/ admin / pages / edit / 4 URL的其他字段旁边进行编辑。
我很确定我需要覆盖PagesModule的各个部分,例如PageEntryFormSections(doc)。而且我认为我有这个工作。
但是当使用Xdebug时,我看到在this line中的edit()
中查看HttpControllerAdminPagesController
(通过依赖注入?†)的PageModel仍然没有显示我的新drip_delay
字段。
如何覆盖PageModel或执行我需要做的任何事情,以便在此Admin面板视图中显示drip_delay
字段?
†Laravel关于container和controllers的文档暗示了这一点。
要首先覆盖模型,您需要一个新的模型来扩展您要覆盖的模型:
<?php namespace RyanExtenderModulePost;
class PostModel extends AnomalyPostsModulePostPostModel
{
}
然后在ServiceProvider
里面你需要将它绑定:
<?php namespace RyanExtenderModule;
use AnomalyPostsModulePostPostModel;
use AnomalyStreamsPlatformAddonAddonServiceProvider;
class ExtenderModuleServiceProvider extends AddonServiceProvider
{
protected $bindings = [
PostModel::class => RyanExtenderModulePostPostModel::class,
];
}
就这样。祝好运 ))
以上是关于如何覆盖PyroCMS中的模型类(Laravel,PHP)?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.7 - 覆盖请求验证类中的 all() 方法以验证路由参数?