Как переопределить класс модели в PyroCMS (Laravel, PHP)? - PullRequest
0 голосов
/ 25 мая 2018

Я установил 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 о контейнере и контроллерах подразумевают это.

1 Ответ

0 голосов
/ 27 мая 2018

Для того, чтобы сначала переопределить модель, вам нужна новая, которая расширяет модель, которую вы хотите переопределить:

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

Вот и все.Удачи))

...