Неустранимая ошибка: вызов функции-члена schemaCollection () для не-объекта в vendor / cakephp / cakephp / src / ORM / Table.php в строке 421

Всем привет и счастливой Пасхи!

У меня возникла эта проблема при переносе устаревшего приложения с CakePHP 2.x на CakePHP 3.x.

Я пытаюсь загрузить все содержимое таблицы базы данных в функцию инициализации модели (ConfigurationsTable.php - преобразована в Singleton). Я также пробовал тот же код в конструкторе, но все равно получаю ту же ошибку. Также попытался переместить его в отдельную функцию, но все равно не повезло.

Он отлично работает в CakePHP 2.x, но я получаю фатальную ошибку в CakePHP 3.

Код выглядит следующим образом

namespace App\Model\Table;

use Cake\ORM\Table;
use Cake\Validation\Validator;

class ConfigurationsTable extends Table
{

private $_configurations;

public static function getInstance()
{
    static $instance = null;

    if ($instance === null) {
        $instance = new static();
    }

    return $instance;
}

public function is_set($key)
{
    return isset($this->_configurations->{$key});
}

public function fetch($key)
{
    return $this->_configurations->{$key};
}

public function initialize(array $config)
{
    $this->addBehavior('Timestamp');

    $this->_configurations = new \stdClass();

    $configs = $this->find('all');

    foreach ($configs as $c) {
        if (isset($c->key) && $c->key != '') {
            $this->_configurations->{$c->key} = $c->value;
        }
    }


}


public function validationDefault(Validator $validator)
{
    $validator
        ->notEmpty('key')
        ->add('key', [
            'unique' => [
                'rule' => 'validateUnique',
                'provider' => 'table',
                'message' => __('This configuration key already exists')
            ]
        ])
        ->notEmpty('value')
        ;

    return $validator;
}

Строка, вызывающая ошибку: $ configs = $ this-> find ('all');

Может ли кто-нибудь предоставить мне решение для этого? Мне это нужно для работы ..

Заранее большое спасибо


person dkourk    schedule 05.04.2015    source источник


Ответы (1)


Вы не можете слепо применять концепции 2.x и ожидать, что это сработает. Прежде чем приступить к работе с кодом, о котором вы не знаете, взгляните хотя бы на документацию по API.

http://api.cakephp.org/3.0/class-Cake.ORM.Table.html#___construct

и взглянуть на сам источник, чтобы понять, что на самом деле делает код, было бы еще лучше.

При создании экземпляров классов таблиц вручную необходимо предоставить как минимум экземпляр подключения . Однако то, что вы там делаете, не имеет особого смысла, на самом деле нет необходимости в настраиваемом геттере статического экземпляра, вот что TableRegistry::get() для этого.

person ndm    schedule 05.04.2015
comment
Привет, спасибо за ваше время и усилия, а также за полезные указатели, мне удалось заставить его работать. Спасибо еще раз! - person dkourk; 05.04.2015