LaravelRUS / SleepingOwlAdmin

🦉 Administrative interface builder for Laravel (Laravel admin)
http://sleepingowladmin.ru/
MIT License
800 stars 216 forks source link

Cannot end a section without first starting one. (View: D:\OpenServer\domains\notarius\vendor\laravelrus\sleepingowl\resources\views\default\_layout\inner.blade.php) #710

Closed Fedchishina closed 7 years ago

Fedchishina commented 7 years ago

Помогите поскорее пожалуйста. какой-то серьезный баг. До обновления админки всё работало

Версия в композере

"laravelrus/sleepingowl": "4.*@dev", "name": "laravelrus/sleepingowl", "version": "dev-development", "source": { "type": "git", "url": "https://github.com/LaravelRUS/SleepingOwlAdmin.git", "reference": "798cbc99e90052147be853c60e25b78ad835ec39" },

  1. При нажатии "редактировать" в любом месте, где есть множественные связи, стала выплывать такая ошибка: http://joxi.ru/gmvzylNTxM78Pm http://joxi.ru/82QEPLlt1dY6l2

Всё работало пока не обновила админку композером недавно. вот код:

<?php

use App\City;
use SleepingOwl\Admin\Model\ModelConfiguration;

AdminSection::registerModel(City::class, function (ModelConfiguration $model) {
    $model->setTitle('Города');
    // Display
    $model->onDisplay(function () {
        return AdminDisplay::datatablesAsync()->setDisplaySearch(true)->setApply(function($query) {

        })->setColumns([
            AdminColumn::link('name')->setLabel('город'),
        ])->paginate(5);
    });
    $model->onCreateAndEdit(function() {
        $form = AdminForm::form()->setItems([
            AdminFormElement::text('name', 'город')->required(),
        ]);
        $form->getButtons()
            ->setSaveButtonText('Сохранить')
            ->hideSaveAndCloseButton();
        return $form;
    });

    $model->onCreateAndEdit(function($id = null) {
        $display = AdminDisplay::tabbed();
        $display->setTabs(function() use ($id) {
            $tabs = [];
            $form = AdminForm::panel();
            $form->addHeader(AdminFormElement::columns()
                ->addColumn([
                    AdminFormElement::text('name', 'город')->required(),
                ], 12)
            );
            $tabs[] = AdminDisplay::tab($form)->setLabel('Общая инфо')->setActive(true)->setIcon('<i class="fa fa-credit-card"></i>');
            if (! is_null($id)) {

                $districts = AdminSection::getModel(\App\District::class)->fireDisplay();
                $districts->getScopes()->push(['withCity', $id]);
                $districts->setParameter('city_id', $id);
                $tabs[] = AdminDisplay::tab($districts)->setLabel('районы этого города')->setIcon('<i class="fa fa-legal"></i>');
            }
            return $tabs;
        });
        return $display;
    });
});

если убрать районы $districts = AdminSection::getModel(\App\District::class)->fireDisplay(); $districts->getScopes()->push(['withCity', $id]); $districts->setParameter('city_id', $id); $tabs[] = AdminDisplay::tab($districts)->setLabel('районы этого города')->setIcon('');

всё открывается

ghost commented 7 years ago

@Fedchishina Дело в том что этот момент так больше не работает

если убрать районы

$districts = AdminSection::getModel(\App\District::class)->fireDisplay();
$districts->getScopes()->push(['withCity', $id]);
$districts->setParameter('city_id', $id);
$tabs[] = AdminDisplay::tab($districts)->setLabel('районы этого города')->setIcon('');

Теперь это будет выглядеть приблизительно так

$districts = AdminSection::getModel(\App\District::class)->fireDisplay(['scopes' => ['withCity', $id]]);
//В модель которую запрашиваете
$model->onDisplay(function($scopes = null) {
$display = AdminDisplay::datatablesAsync();      
if($scopes){
       $display->setScopes($scopes);
}
})

Присоединяйтесь к нам в телеграме - там очень быстро помогают по подобным вопросам. http://t.me/sleeping_owl

Fedchishina commented 7 years ago

Ошибка осталась. А вопрос вы уже закрываете.

AdminSection::registerModel(City::class, function (ModelConfiguration $model) {
    $model->setTitle('Города');
    // Display
    $model->onDisplay(function ($scopes = null) {
        $display = AdminDisplay::datatablesAsync();
        if($scopes){
            $display->setScopes($scopes);
        }
        return $display->setDisplaySearch(true)->setApply(function($query) {
        })->setColumns([
            AdminColumn::link('name')->setLabel('город'),
        ])->paginate(5);
    });

    $model->onCreateAndEdit(function($id = null) {
        $display = AdminDisplay::tabbed();
        $display->setTabs(function() use ($id) {
            $tabs = [];
            $form = AdminForm::panel();
            $form->addHeader(AdminFormElement::columns()
                ->addColumn([
                    AdminFormElement::text('name', 'город')->required(),
                ], 12)
            );
            $tabs[] = AdminDisplay::tab($form)->setLabel('Общая инфо')->setActive(true)->setIcon('<i class="fa fa-credit-card"></i>');
            if (! is_null($id)) {

                $districts = AdminSection::getModel(\App\District::class)->fireDisplay(['scopes' => ['withCity', $id]]);
                $tabs[] = AdminDisplay::tab($districts)->setLabel('районы этого города')->setIcon('<i class="fa fa-legal"></i>');
            }
            return $tabs;
        });
        return $display;
    });
});