Ошибка пространства имен Lithium Relations? - PullRequest
0 голосов
/ 24 декабря 2011

Моя папка / иерархия пространства имен:

  • приложение / модели / структуры
    • Entities.php
    • люди
      • People.php
      • (другие модели)

Я следовал инструкциям по этому вопросу: литий заполнял несколько моделей из представления , но получил ошибку "не удалось открыть поток: нет такого файла или каталога в C: \ xampp \ htdocs \ PhiCRM \ library \ lithium \ core \ Libraries.php в строке 468 ", который, как вы уже видели, вложен в другую папку, которая указана в массиве конфигов, показанном ниже

Мое исправление: я изменил

public $belongsTo = array(
    'People' => array(
        'class' => '\app\models\entities\people\People',
        'key' => 'person_id',
    ),
);

до

public $belongsTo = array(
    'people\People' => array(
        'class' => '\app\models\entities\people\People',
        'key' => 'person_id',
    ),
);

и теперь ошибка исчезает (изменила вторую строку с «Люди» на «люди \ люди»), но теперь я получаю сообщение об ошибке: «Связанный класс модели» app \ models \ entity \ people \ people \ People ' не найдено.' в C: \ xampp \ htdocs \ PhiCRM \ library \ lithium \ data \ model \ Relationship.php в строке 159, так что теперь он привязывает ДРУГИХ людей к строке пути.

Мой вопрос: это предполагаемое поведение? Разве модель отношений не должна использовать путь к классу, который я указал в массиве $ configs, вместо конкатенации строк с именем класса? Если это ошибка, я должен сообщить об этом, и как?

Ответы [ 2 ]

1 голос
/ 06 января 2012
public $belongsTo = array(
    'People' => array(
        'to' => '\app\models\entities\people\People',
        'key' => 'person_id',
    ),
);

Должно работать лучше с 'to' вместо 'class'; -)

0 голосов
/ 26 декабря 2011

В библиотеках / литий / данные / модель / Relashionships.php, ln 115, оригинальный код:

    if (!$config['to']) {
        $assoc = preg_replace("/\\w+$/", "", $config['from']) . $name;  
        $config['to'] = Libraries::locate('models', $assoc);
    }

Изменено на

    if (!$config['to']) {
        if(!$config['class']){
            $assoc = preg_replace("/\\w+$/", "", $config['from']) . $name;  
        }
        else{
            $assoc = $config['class'];
        }
        $config['to'] = Libraries::locate('models', $assoc);
    }

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

...