4.82.20
Changed
-
Добавлен колбек на сохранение файлов (читать в документации)
AdminFormElement::images('some_images', "Some Label") ... ->setSaveCallback(function ($file, $path, $filename, $settings) use ($id) { $result = $youimage; return ['path' => $result['url'], 'value' => $result['path|url']]; }),
-
Исправлена проблема с заменой контроллера для раздела для Laravel версии > 5.2
-
Перенос интерфейсов
SleepingOwl\Admin\Contracts\RepositoryInterface
иSleepingOwl\Admin\Contracts\TreeRepositoryInterface
в директориюSleepingOwl\Admin\Contracts\Repositories
-
Замена название директории
src\Repository
вsrc\Repositories
-
Добавлена поддержка Laravel 5.4
-
В конструктор класса раздела добавлен еще один обязательный параметр
Application $app
public function __construct(\Illuminate\Contracts\Foundation\Application $app, $class) { ... }
-
Исправлена проблема с использованием Policy в классах разделов.
-
Глобальный рефакторинг и структурирование кода.
-
Класс шаблона теперь ответчает за отображение хлебных крошек, meta и навгации
-
Класс
Admin
стал более системным и центральным. В него вынесены регистрируемые сервис провайдеры и алиасы
сервис контейнеров.
43e24a7Алиасы для сервис контейнеров
[ 'sleeping_owl' => ['SleepingOwl\Admin\Admin', 'SleepingOwl\Admin\Contracts\AdminInterface'], 'sleeping_owl.template' => ['SleepingOwl\Admin\Contracts\Template\TemplateInterface'], 'sleeping_owl.breadcrumbs' => ['SleepingOwl\Admin\Contracts\Template\Breadcrumbs'], 'sleeping_owl.widgets' => ['SleepingOwl\Admin\Contracts\Widgets\WidgetsRegistryInterface', 'SleepingOwl\Admin\Widgets\WidgetsRegistry'], 'sleeping_owl.message' => ['SleepingOwl\Admin\Widgets\Messages\MessageStack'], 'sleeping_owl.navigation' => ['SleepingOwl\Admin\Navigation', 'SleepingOwl\Admin\Contracts\Navigation\NavigationInterface'], 'sleeping_owl.wysiwyg' => ['SleepingOwl\Admin\Wysiwyg\Manager', 'SleepingOwl\Admin\Contracts\Wysiwyg\WysiwygMangerInterface'], 'sleeping_owl.meta' => ['assets.meta', 'SleepingOwl\Admin\Contracts\Template\MetaInterface', 'SleepingOwl\Admin\Templates\Meta'], ]
-
-
Структурирование интерфейсов.
SleepingOwl\Admin\Contracts\ColumnInterface -> SleepingOwl\Admin\Contracts\Display\ColumnInterface` SleepingOwl\Admin\Contracts\DisplayInterface -> SleepingOwl\Admin\Contracts\Display\DisplayInterface SleepingOwl\Admin\Contracts\ActionInterface -> SleepingOwl\Admin\Contracts\Display\Extension\ActionInterface SleepingOwl\Admin\Contracts\ColumnFilterInterface -> SleepingOwl\Admin\Contracts\Display\Extension\ColumnFilterInterface SleepingOwl\Admin\Contracts\FilterInterface -> SleepingOwl\Admin\Contracts\Display\Extension\FilterInterface SleepingOwl\Admin\Contracts\NamedColumnInterface -> SleepingOwl\Admin\Contracts\Display\NamedColumnInterface SleepingOwl\Admin\Contracts\FormButtonsInterface -> SleepingOwl\Admin\Contracts\Form\FormButtonsInterface SleepingOwl\Admin\Contracts\FormElementInterface -> SleepingOwl\Admin\Contracts\Form\FormElementInterface SleepingOwl\Admin\Contracts\FormInterface -> SleepingOwl\Admin\Contracts\Form\FormInterface
-
Переделана инициализация хлебных крошек
Для лучшей совместимости было принято решение об отказе от сервис провайдераDaveJamesMiller\Breadcrumbs\ServiceProvider
, т.к.
при испльзовании этого сервис провайдера была проблема с использованием пакета в своем приложении.
Для использования пакета в своем приложении вы должны подключать самостоятельно сервис провайдерDaveJamesMiller\Breadcrumbs\ServiceProvider
и регистрировать при необходимости фасад. -
Вынос логики роутов отдельных компонентов из анонимных функций в контроллеры для возможности кеширования роутов.
-
Phpunit version
~4.1 -> ~5.0
-
Полностью переработал принцип работы с различными типами репозиториев, которые используются для построения дерева.
Теперь за каждый тип дерева отвечает отдельный класс, https://github.com/LaravelRUS/SleepingOwlAdmin/tree/development/src/Display/Tree Это позволяет нам полностью отвязать
TreeRepository
от конкретного пакета построения дерева и использовать свои реализации.Для поддержки своего типа дерева необходимо добавить свой класс, для удобства его можно наследовать от
SleepingOwl\Admin\Display\Tree\NestedsetType
и реализовать те методы, которые он попросит. В случае @Lunatig будет выглядеть как-то так:<?php namespace Admin\Tree; use Illuminate\Database\Eloquent\Model; use SleepingOwl\Admin\Display\Tree\BaumNodeType; /** * @see https://github.com/etrepat/baum */ class CustomBaumNodeType extends BaumNodeType { /** * Get tree structure. * * @param \Illuminate\Database\Eloquent\Collection $collection * * @return mixed */ public function getTree(\Illuminate\Database\Eloquent\Collection $collection) { return $collection->toSortedHierarchy(); } }
А дальше при инициализации
DisplayTree
мы указываем этот классAdminDisplay::tree(\Admin\Tree\CustomBaumNodeType::class)->...
Added
-
Collection
SleepingOwl\Admin\Form\FormElementsCollection
-
Collection
SleepingOwl\Admin\Display\DisplayTabsCollection
-
Collection
SleepingOwl\Admin\Display\ExtensionCollection
-
Interface
SleepingOwl\Admin\Contracts\WithModel
-
Admin Element Factories
// Display Column Filters 'sleeping_owl.column_filter' => SleepingOwl\Admin\Contracts\Display\DisplayColumnFilterFactoryInterface::class; // Displays 'sleeping_owl.display' => SleepingOwl\Admin\Contracts\Display\DisplayFactoryInterface::class; // Display Columns 'sleeping_owl.table.column' => SleepingOwl\Admin\Contracts\Display\DisplayColumnFactoryInterface::class; // Display ColumnEditables 'sleeping_owl.table.column.editable' => SleepingOwl\Admin\Contracts\Display\DisplayColumnEditableFactoryInterface::class; // Display Filters 'sleeping_owl.display.filter' => SleepingOwl\Admin\Contracts\Display\DisplayFilterFactoryInterface::class; // Forms 'sleeping_owl.form' => SleepingOwl\Admin\Contracts\Form\FormFactoryInterface::class; // Form Elements 'sleeping_owl.form.element' => SleepingOwl\Admin\Contracts\Form\FormElementFactoryInterface::class;