Обновление SilverStripe 3.2 UploadField не показывает файлы

1

Я обновляю сайт SilverStripe от 3,0 до 3,2. Однако после обновления UploadField на определенных типах страниц не отображает связанные файлы.

Solution.php

public static $many_many = array (
    "LinkedDocuments" => "File"
);

public function getCMSFields() {

    $fields = parent::getCMSFields();

    if ($this->ID != 0) {
        $fields->addFieldToTab("Root.Documents", UploadField::create("LinkedDocuments")->setFolderName("assets/solutions/" . $this->URLSegment));
    }

    return $fields;
}

Расширение файла

class SolutionFileExtenstion extends DataExtension {
    private static $belongs_many_many = array('Solutions' => 'Solution');
}

Таблица Solution_LinkedDocuments выглядит нормально. Файлы все еще работают в интерфейсе. Единственная проблема заключается в том, что UplaodField пуст, поэтому сохранение страницы приводит к удалению связанных файлов.

Теги:
silverstripe

2 ответа

0
Лучший ответ

Problme оказался поврежденной таблицей базы данных. Не знаю, почему ссылки все еще работали в интерфейсе, но я написал задачу по перенастройке файлов на основе имени файла из копии перед обновлением базы данных и исправил ее.

1

Невозможно быстро обнаружить что-либо другое, кроме этого:

public static $many_many = array (
    "LinkedDocuments" => "File"
);

3.2 содержит основные изменения, поскольку предыдущие версии не соответствовали семантической версии.

На 3.1 статические переменные должны быть объявлены как частные статические для работы справа

private static $many_many = array (
    "LinkedDocuments" => "File"
);

См. Https://docs.silverstripe.org/en/3.1/changelogs/3.1.0/#upgrading#statics-in-custom-page-classes-need-to-be-private.

Из документации:

"Большинство статистических данных, определенных в SiteTree и DataObject, подвержены влиянию, например: $ db, $ has_one, $ has_many, $ many_many, $ defaults, $ allowed_children. То же самое касается статистики, определенной в ContentController, например $ allowed_actions."

Также просмотрите журналы изменений до 3.1.9 и https://docs.silverstripe.org/en/3.2/upgrading/.

Так что это хотя бы одна проблема. Также есть много устаревших функций, которые вы можете использовать, поэтому вам нужно следить за ними. Лично я еще ничего не запускал в 3.2 и не вижу ничего прямого в использовании UploadField, но на данный момент я не могу проверить это.

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

По-видимому, у вас нет, поэтому я предлагаю вам настроить сайт на сервере разработки на режим dev и установить уровень ошибки PHP для E_ALL и display_errors.

Или просмотрите журналы ошибок PHP на сервере напрямую.

  • 0
    Спасибо за то, что поймали публичное заявление, иногда я пропустил это. Но это не так. Новые страницы работают нормально, это просто существующие страницы, и только это отношение. Отношение $ many_many, добавленное модулем Gallery, работает просто отлично. Журналы ошибок становятся пустыми, только несколько предупреждений, с которыми я уже имел дело.
  • 0
    Отследил проблему до поврежденной таблицы базы данных,
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню