Я установил 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()
function:
$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
в этой панели администратораПредставление?
† Документы Laravel о контейнере и контроллерах подразумевают это.