Spec-Zone.ru › CodeIgniter 4

Создание основных системных классов

Каждый раз при запуске CodeIgniter инициализируются несколько базовых классов, которые являются частью ядра фреймворка. Однако возможно заменить любой из этих классов на свой собственный вариант или даже просто расширить существующие.

Большинству пользователей никогда не понадобится это делать, но возможность заменить или расширить их существует для тех, кто хочет существенно изменить ядро CodeIgniter.

Примечание

Вмешательство в системный класс ядра имеет много последствий, поэтому убедитесь, что вы понимаете, что делаете, прежде чем пытаться это сделать.

Список системных классов

Ниже приведен список основных системных файлов, которые вызываются каждый раз при запуске CodeIgniter:

  • Config\Services
  • CodeIgniter\Autoloader\Autoloader
  • CodeIgniter\Config\DotEnv
  • CodeIgniter\Controller
  • CodeIgniter\Debug\Exceptions
  • CodeIgniter\Debug\Timer
  • CodeIgniter\Events\Events
  • CodeIgniter\HTTP\CLIRequest (только при запуске из командной строки)
  • CodeIgniter\HTTP\IncomingRequest (при запуске через HTTP)
  • CodeIgniter\HTTP\Request
  • CodeIgniter\HTTP\Response
  • CodeIgniter\HTTP\Message
  • CodeIgniter\HTTP\URI
  • CodeIgniter\Log\Logger
  • CodeIgniter\Log\Handlers\BaseHandler
  • CodeIgniter\Log\Handlers\FileHandler
  • CodeIgniter\Router\RouteCollection
  • CodeIgniter\Router\Router
  • CodeIgniter\Security\Security
  • CodeIgniter\View\View
  • CodeIgniter\View\Escaper

Замена основных классов

Чтобы использовать один из ваших собственных системных классов вместо стандартного, убедитесь, что Автозагрузчик может найти ваш класс, что ваш новый класс расширяет соответствующий интерфейс и измените соответствующую службу для загрузки вашего класса вместо стандартного.

Например, если у вас есть новый App\Libraries\RouteCollection класс, который вы хотите использовать вместо стандартного системного класса, вы создадите свой класс следующим образом:

<?php

namespace App\Libraries;

use CodeIgniter\Router\RouteCollectionInterface;

class RouteCollection implements RouteCollectionInterface
{
    // ...
}

Затем вы добавите routes сервис в app/Config/Services.php, чтобы загрузить ваш класс вместо стандартного:

public static function routes(bool $getShared = true)
{
    if ($getShared) {
        return static::getSharedInstance('routes');
    }

    return new RouteCollection(static::locator(), config('Modules'));
}

Расширение основных классов

Если вам нужно только добавить некоторую функциональность к существующей библиотеке — возможно, добавить один или два метода — то пересоздание всей библиотеки будет избыточным. В этом случае лучше просто расширить класс. Расширение класса почти идентично замене класса за одним исключением:

  • Декларация класса должна расширять родительский класс.

Например, чтобы расширить родной класс RouteCollection, вы объявите свой класс так:

<?php

namespace App\Libraries;

use CodeIgniter\Router\RouteCollection;

class RouteCollection extends RouteCollection
{
    // ...
}

Если вам нужно использовать конструктор в вашем классе, убедитесь, что вы расширяете родительский конструктор:

<?php

namespace App\Libraries;

use CodeIgniter\Router\RouteCollection as BaseRouteCollection;

class RouteCollection extends BaseRouteCollection
{
    public function __construct()
    {
        parent::__construct();

        // your code here
    }
}

Подсказка: Любые функции в вашем классе, имеющие одинаковые имена с методами в родительском классе, будут использоваться вместо стандартных (это известно как «переопределение методов»). Это позволяет вам существенно изменить ядро CodeIgniter.

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/extending/core_classes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API