bugfix> 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('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 件
  • 最初にモデルをオーバーライドするには、オーバーライドするモデルを拡張する新しいモデルが必要です。

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

    それで全部です。幸運を ))

あなたの答え