Я обновляю сайт 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
пуст, поэтому сохранение страницы приводит к удалению связанных файлов.
Problme оказался поврежденной таблицей базы данных. Не знаю, почему ссылки все еще работали в интерфейсе, но я написал задачу по перенастройке файлов на основе имени файла из копии перед обновлением базы данных и исправил ее.
Невозможно быстро обнаружить что-либо другое, кроме этого:
public static $many_many = array (
"LinkedDocuments" => "File"
);
3.2 содержит основные изменения, поскольку предыдущие версии не соответствовали семантической версии.
На 3.1 статические переменные должны быть объявлены как частные статические для работы справа
private static $many_many = array (
"LinkedDocuments" => "File"
);
Из документации:
"Большинство статистических данных, определенных в 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 на сервере напрямую.