Skip to content

Problem with extending core class. #1922

Description

@enix-app

Description/Detail

I want to extend CodeIgniter\View\View class with additional methods.
I'm using view layouts.

<?php

class MyView extends \CodeIgniter\View\View {

    public function asset()
    {
        //....
    }
}

app/Config/Services.php file:

<?php namespace Config;

use CodeIgniter\Config\Services as CoreServices;
use CodeIgniter\Config\BaseConfig;

require_once SYSTEMPATH . 'Config/Services.php';

class class Services extends CoreServices
{
    public static function renderer($viewPath=null, $config=null, bool $getShared=true)
    {
        if ($getShared)
        {
            return static::getSharedInstance('renderer', $viewPath, $config);
        }

        if (is_null($config))
        {
            $config = new \Config\View();
        }

        if (is_null($viewPath))
        {
            $paths = config('Paths');
            $viewPath = $paths->viewDirectory;
        }

        return new \MyView($config, $viewPath, static::locator(true), CI_DEBUG, static::logger(true));
    }
}

In my view file, shared instance always return \CodeIgniter\View\View class, not MyView class.

app/Views/sample.php file:

<?php

// Error: Call to undefined method CodeIgniter\View\View::asset()   
$this->asset();

My solution is simple, only move CodeIgniter\Config\BaseService::getSharedInstance() to Config\Services::getSharedInstance().

Any idea? Thanks.

Version

CodeIgniter 4.0.0-beta-2

Affected module(s)

Config services files.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions