Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Sharp Laravel Package

code16/sharp

Code-driven CMS framework for Laravel (PHP 8.3+/Laravel 11+). Build admin/CMS sections with a clean UI and strong DX: CRUD with validation, search/sort/filter, bulk or custom commands, and authorization—no front-end code required, data-agnostic.

View on GitHub
Deep Wiki
Context7

Upgrading from 7.x to 8.x

Get new assets, clear cache

This is true for every update: be sure to grab the latest assets and to clear the view cache:

php artisan vendor:publish --provider="Code16\Sharp\SharpServiceProvider" --tag=assets
php artisan view:clear

::: tip Information Due to the migration to Vite, all .js, .css files moved from
/public/vendor/sharp to /public/vendor/sharp/assets. :::

implement Show::delete($id), remove Form::delete($id)

In Sharp 8 we decided to finally move the instance deletion (meaning the Delete command) where it belongs: in the Show Page and the Entity List, and not in the Form as it was before for legacy reasons. This implies that a new Delete command is added in each instance of the Entity List and in the Show Page (of course, depending on authorizations).

This means that the Form delete($id) method is deprecated in v8 (and will be removed in 9.x), which may impact your code in two ways, depending on your situation:

  • All Show Pages must now define a delete($id) method — it should be in most cases a copy / paste of the Form delete($id). In this case, you should remove entirely the Form delete($id) method.
  • For entities without Show Pages, you are not required to update your code because Sharp will detect and call the Form::delete() method as a workaround; the right way though (required in 9.x) would be to move the delete() method to your Entity List implementation.

For custom delete confirmations, you should call the new SharpShow::configureDeleteConfirmationText(string $confirmationText) and SharpEntityList::configureDelete(?bool $hide = false, ?string $confirmationText = null).

Note: the (undocumented) deleteSharpShow() test assertion was also removed, use deleteSharpEntityList() or deleteSharpShow() instead.

All deprecated methods were removed

Methods that were deprecated in 7.x were removed entirely. This includes:

  • handling sharp's menu and entity in sharp.php config file (use SharpMenu and SharpEntity classes instead)
  • policies which does not extend Code16\Sharp\Auth\SharpEntityPolicy (see Entity policies)
  • passing a closure for the $collapsible param of ShowLayout::addEntityListSection (pass a boolean)
  • old test assertions for commands
  • SharpFormUploadField::setCroppable() replaced with SharpFormUploadField::setTransformable() (see Upload documentation)

Laravel 10+ and php 8.2+ required

It's not a breaking change but minimal requirements are now these.

New way to build Entity List layout

SharpEntityList's buildListFields(), buildListLayout() and buildListLayoutForSmallScreens() are now deprecated, in favor of an easier way to build the layout in a new buildList() method.

This means we can replace this code from 7.x:

class PostList extends SharpEntityList
{
    protected function buildListFields(EntityListFieldsContainer $fieldsContainer): void
    {
        $fieldsContainer
            ->addField(
                EntityListField::make('cover'),
            )
            ->addField(
                EntityListField::make('title')
                    ->setLabel('Title'),
            )
            ->addField(
                EntityListField::make('author:name')
                    ->setLabel('Author')
                    ->setSortable(),
            )
            ->addField(
                EntityListField::make('published_at')
                    ->setLabel('Published at')
                    ->setSortable(),
            );
    }

    protected function buildListLayout(EntityListFieldsLayout $fieldsLayout): void
    {
        $fieldsLayout
            ->addColumn('cover', 1)
            ->addColumn('title', 4)
            ->addColumn('author:name', 3)
            ->addColumn('published_at', 4);
    }

    protected function buildListLayoutForSmallScreens(EntityListFieldsLayout $fieldsLayout): void
    {
        $fieldsLayout
            ->addColumn('title', 6)
            ->addColumn('published_at', 6);
    }
    // ...
}

With this in 8.x:

class PostList extends SharpEntityList
{
    protected function buildList(EntityListFieldsContainer $fields): void
    {
        $fields
            ->addField(
                EntityListField::make('cover')
                    ->setWidth(1)
                    ->hideOnSmallScreens(),
            )
            ->addField(
                EntityListField::make('title')
                    ->setLabel('Title')
                    ->setWidth(4)
                    ->setWidthOnSmallScreens(6),
            )
            ->addField(
                EntityListField::make('author:name')
                    ->setLabel('Author')
                    ->setWidth(3)
                    ->hideOnSmallScreens()
                    ->setSortable(),
            )
            ->addField(
                EntityListField::make('published_at')
                    ->setLabel('Published at')
                    ->setWidth(4)
                    ->setWidthOnSmallScreens(6)
                    ->setSortable(),
            );
    }
    // ...
}

The old API is still supported to avoid breaking changes, but is deprecated and will be removed in 9.x. This new format is the only one documented in 8.x, here: Building EntityList.

Middleware declaration in config file

Sharp now uses the middleware key in the sharp.php config file to declare the middleware to be applied to all routes. In the unlikely case that you were injecting / replacing a middleware, you should now update this config key.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle
atriumphp/atrium