Lithium: пользовательский источник данных приводит к вызову неопределенного метода `configureClass()`

Я пытаюсь создать источник данных для работы с CSV. Я следую этому примеру

connections.php:

Connections::add('csv', [
        'type' => 'file',
        'adapter' => 'Csv',
    ]
);

приложение / расширение / адаптер / данные / источник / файл /Csv.php

namespace app\extensions\adapter\data\source\file;

use lithium\core\Libraries;

class Csv extends \app\extensions\adapter\data\source\File {

    public function __construct(array $config = []) {
        $defaults = [
            'delimiter' => ',',
            'enclosure' => '\"',
            'escape' => '\\',
            'path' => Libraries::get(true, 'resources') . '/file/csv',
        ];
        $config += $defaults;
        parent::__construct($config);
    }

    public function read($query, array $options = array()) {
        print_r($query);
        die();
    }
}

приложение / расширения / адаптер / данные / источник / file.php

<?php

namespace app\extensions\adapter\data\source;

use lithium\core\Libraries;

class File extends \lithium\core\Object {
    public function __construct(array $config = array()) {
        $defaults = array(
            'encoding' => 'UTF-8',
            'path' => Libraries::get(true, 'resources') . '/file'
        );
        parent::__construct($config + $defaults);
    }
}

?>

приложение / модели / Importers.php

<?php

namespace app\models;

class Importers extends \lithium\data\Model {
    protected $_meta = [ 
        'connection' => 'csv',
    ];
}
?>

Всякий раз, когда я звоню Importers::find('all'); с контроллера я получаю ошибку: Fatal error: Call to undefined method app\extensions\adapter\data\source\file\Csv::configureClass() in ...

Если я определю configureClass() Я получаю еще одну ошибку, заявляющую enable() не определено. Не совсем уверен, что я здесь делаю не так.

1 ответ

Поправьте меня, если я ошибаюсь, но кажется, что File должен расширять абстрактный класс \lithium\data\Source что, в свою очередь, расширяет \lithium\core\Object,

Следовательно, app/extensions/adapter/data/source/File.php будет выглядеть так:

class File extends \lithium\data\Source {

Это комментарии для Source.php:

/**
 * This is the base class for Lithium's data abstraction layer.
 *
 * In addition to utility methods and standardized properties, it defines the implementation tasks
 * for all Lithium classes that work with external data, such as connections to remote resources
 * (`connect()` and `disconnect()`), introspecting available data objects (`sources()` and
 * `describe()`), and a standard read/write interface (`create()`, `read()`, `update()` and
 * `delete()`).
 *
 * Subclasses may implement any other non-standard functionality, but the above methods define the
 * requirements for interacting with `Model` objects, and other classes within `lithium\data`.
 */

Надеюсь, это кому-нибудь поможет (если я не ошибаюсь:)). Я люблю эту структуру!

Другие вопросы по тегам