500 Warning: "array_fill(): Number of elements must be positive" at line 743 of ...\cms\code\ModelAdmin.php
Оказалось что после удаления обьекта идет редирект по адресу SearchForm?action=search
Сама ошибка появляется в следуйще строке метода getResultsTable
$tf->setFieldFormatting(array_combine(array_keys($summaryFields), array_fill(0,count($summaryFields), $url)));Но поскольку данные в форму не посылались, то ResultAssembly пуст и метод getResultColumns возвращает нам в переменную $summaryFields пустой массив изза чего все и валится.
Собственно полечил все очень просто :
class MyAdmin extends ModelAdmin { public static $managed_models = array( 'MyModel1', 'MyModel2', 'MyModel3' ); public static $collection_controller_class = "MyAdmin_CollectionController"; static $url_segment = 'my_admin_tool'; // will be linked as /admin/my_admin_tool static $menu_title = 'My Admin Tool'; static $menu_priority = 8; // for sorting in cms menu } class MyAdmin_CollectionController extends ModelAdmin_CollectionController { function getResultColumns($searchCriteria, $selectedOnly = true) { $model = singleton($this->modelClass); $summaryFields = $this->columnsAvailable(); if($selectedOnly && $searchCriteria['ResultAssembly']) {// Fix for CMS $resultAssembly = $searchCriteria['ResultAssembly']; if(!is_array($resultAssembly)) { $explodedAssembly = split(' *, *', $resultAssembly); $resultAssembly = array(); foreach($explodedAssembly as $item) $resultAssembly[$item] = true; } return array_intersect_key($summaryFields, $resultAssembly); } else { return $summaryFields; } } }
Хоть мне и пришлось переписать метод getResultColumns, но зато удалось избежать изменения исходного кода SilverStripe.
Комментариев нет:
Отправить комментарий