LaravelRUS / SleepingOwlAdmin

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

Управление кнопками в методах секции `onEdit` и `onCreate` #581

Closed mavsan closed 7 years ago

mavsan commented 7 years ago

При управлении кнопками в методах секции onEdit и onCreate если сделать вот так:

$form->getButtons()->replaceButtons([
            'save' => new Save(),
            'delete' => null,
        ]);

return $form;

То все будет работать отлично. А вот если сделать вот так:

return $form->getButtons()->replaceButtons([
            'save' => new Save(),
            'delete' => null,
        ]);

То вылетит исключение: Call to a member function getCancelUrl() on null.

mavsan commented 7 years ago
[2017-05-14 04:43:40] local.ERROR: Symfony\Component\Debug\Exception\FatalThrowableError: Call to a member function getCancelUrl() on null in /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravelrus/sleepingowl/src/Form/FormButtons.php:541
Stack trace:
#0 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravelrus/sleepingowl/src/Traits/Renderable.php(53): SleepingOwl\Admin\Form\FormButtons->toArray()
#1 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravelrus/sleepingowl/src/Http/Controllers/AdminController.php(510): SleepingOwl\Admin\Form\FormButtons->render()
#2 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravelrus/sleepingowl/src/Http/Controllers/AdminController.php(242): SleepingOwl\Admin\Http\Controllers\AdminController->render(Object(Admin\Http\Sections\GalleriesSection), Object(SleepingOwl\Admin\Form\FormButtons), '\xD0\xA0\xD0\xB5\xD0\xB4\xD0\xB0\xD0\xBA\xD1\x82\xD0\xB8\xD1...')
#3 [internal function]: SleepingOwl\Admin\Http\Controllers\AdminController->getEdit(Object(Admin\Http\Sections\GalleriesSection), '2')
#4 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(55): call_user_func_array(Array, Array)
#5 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(44): Illuminate\Routing\Controller->callAction('getEdit', Array)
#6 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Route.php(203): Illuminate\Routing\ControllerDispatcher->dispatch(Object(Illuminate\Routing\Route), Object(SleepingOwl\Admin\Http\Controllers\AdminController), 'getEdit')
#7 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Route.php(160): Illuminate\Routing\Route->runController()
#8 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Router.php(559): Illuminate\Routing\Route->run()
#9 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Routing\Router->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#10 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/mavsan/laadmin/src/Http/Middleware/AdminAuth.php(25): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#11 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Mavsan\LaAdmin\Http\Middleware\AdminAuth->handle(Object(Illuminate\Http\Request), Object(Closure))
#12 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#13 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(41): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#14 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Routing\Middleware\SubstituteBindings->handle(Object(Illuminate\Http\Request), Object(Closure))
#15 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#16 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php(65): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#17 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\VerifyCsrfToken->handle(Object(Illuminate\Http\Request), Object(Closure))
#18 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#19 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php(49): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#20 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\View\Middleware\ShareErrorsFromSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#21 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#22 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php(64): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#23 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Session\Middleware\StartSession->handle(Object(Illuminate\Http\Request), Object(Closure))
#24 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#25 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php(37): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#26 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse->handle(Object(Illuminate\Http\Request), Object(Closure))
#27 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#28 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php(59): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#29 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Cookie\Middleware\EncryptCookies->handle(Object(Illuminate\Http\Request), Object(Closure))
#30 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#31 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#32 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Router.php(561): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#33 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Router.php(520): Illuminate\Routing\Router->runRouteWithinStack(Object(Illuminate\Routing\Route), Object(Illuminate\Http\Request))
#34 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Router.php(498): Illuminate\Routing\Router->dispatchToRoute(Object(Illuminate\Http\Request))
#35 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(174): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request))
#36 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(30): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}(Object(Illuminate\Http\Request))
#37 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/barryvdh/laravel-debugbar/src/Middleware/Debugbar.php(51): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#38 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Barryvdh\Debugbar\Middleware\Debugbar->handle(Object(Illuminate\Http\Request), Object(Closure))
#39 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#40 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#41 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#42 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#43 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(30): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#44 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle(Object(Illuminate\Http\Request), Object(Closure))
#45 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#46 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#47 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle(Object(Illuminate\Http\Request), Object(Closure))
#48 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#49 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php(46): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#50 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#51 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#52 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#53 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(149): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#54 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#55 /home/mavsan/WEB/domains/hardendurovladivostok.com.loc/public_html/index.php(57): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#56 {main}  
mavsan commented 7 years ago

Вот код:

$form = AdminForm::panel();

$metaTitle = new MetaTitle('title_ru', 'Meta - заголовок (ru)');
$metaTitleEn = new MetaTitle('title_en', 'Meta - заголовок (en)');
$metaDescription =
    new MetaDescription('description_ru', 'Meta - описание (ru)');
$metaDescriptionEn =
    new MetaDescription('description_en', 'Meta - описание (en)');

$image = new Image('main',
    'Обложка альбома, (мин 360x230, будет преобразовано к этому размеру, макс 1000х1000)');
$image->required('Обложка должна быть обязательно')
      ->addValidationRule('dimensions:min_width=360,min_height=230,max_width=1000,max_height=1000',
          'Минимальные размеры изображения обложки - 360x230, максимальные - 1000х1000');

$images = new Images('images',
    'Фото галереи (мин: 360x230, макс: 1000х1000)');
$images->required('В галерее должно быть хотя-бы одно фото (обложка не в счет)!')
       ->addValidationRule('dimensions:min_width=360,min_height=230,max_width=1000,max_height=1000',
           'Минимальные размеры изображения - 360x230, макс. - 1000х1000');

$uri = new Uri();
$uri->setListenField('title_ru');

$form->addBody([
    AdminFormElement::text('title_ru', 'Наименование галереи (рус)')
                    ->required(),
    AdminFormElement::text('title_en', 'Наименование галереи (рус)')
                    ->required(),
    $uri,
    $metaTitle,
    $metaTitleEn,
    $metaDescription,
    $metaDescriptionEn,
    AdminFormElement::wysiwyg('description_ru',
        'Краткое описание галереи (рус)')->required(),
    AdminFormElement::wysiwyg('description_en',
        'Краткое описание галереи (англ)')->required(),
    "<p class='alert bg-info'>Фотография обложки не отображается в галерее! Если она там нужна загрузите её еще раз в фото галереи!!!</p>",
    $image,
    $images,
]);

return $form->getButtons()->replaceButtons([
    'save' => new Save(),
]);