PHPackages                             viewflex/listo - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Admin Panels](/categories/admin)
4. /
5. viewflex/listo

ActiveLibrary[Admin Panels](/categories/admin)

viewflex/listo
==============

Extends the Ligero BREAD micro-framework for Laravel, adding dynamic contextual UI controls supporting complex search architectures.

1.0.1(6y ago)03MITCSSCI failing

Since Nov 13Pushed 6y ago1 watchersCompare

[ Source](https://github.com/viewflex/listo)[ Packagist](https://packagist.org/packages/viewflex/listo)[ RSS](/packages/viewflex-listo/feed)WikiDiscussions master Synced 1w ago

READMEChangelogDependencies (2)Versions (4)Used By (0)

Listo
=====

[](#listo)

[![GitHub license](https://camo.githubusercontent.com/850eae1099d2b05f53383473d7cd51f9bc1ab09b7d0d9e5122f1dd930efdcc6d/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f6d6173686170652f6170697374617475732e737667)](LICENSE.md)

Extends the Ligero BREAD micro-framework for Laravel, adding dynamic contextual UI controls supporting complex search architectures.

Quick-Links:

- [Installation](#installation)
- [Overview](#overview)
    - [Architecture](#architecture)
    - [Live Demo](#live-demo)
- [Enhancements to Ligero](#enhancements-to-ligero)
    - [Config (PublisherConfigInterface)](#config-publisherconfiginterface)
    - [Publisher (PublisherInterface)](#publisher-publisherinterface)
    - [PublisherApi (PublisherApiInterface)](#publisherapi-publisherapiinterface)
    - [Repository (PublisherRepositoryInterface)](#repository-publisherrepositoryinterface)
- [Customization](#customization)
    - [Publishing the Package Files](#publishing-the-package-files)
    - [Extending or Decorating Base Classes](#extending-or-decorating-base-classes)
    - [Namespace for Custom Classes](#namespace-for-custom-classes)
- [Tests](#tests)
- [License](#license)
- [Changelog](#changelog)

Installation
------------

[](#installation)

Via Composer:

```
$ composer require viewflex/listo
```

After installing, add the `ListoServiceProvider` to the list of service providers in Laravel's `config/app.php` file.

```
Viewflex\Listo\ListoServiceProvider::class,
```

Overview
--------

[](#overview)

### Architecture

[](#architecture)

This package wraps the `viewflex/ligero` package, enhancing the Ligero BREAD micro-framework with additional dynamic UI controls supporting complex search architectures. It also has it's own demo implementation that includes the additional UI controls provided. This documentation should be viewed as a supplement to the official [Ligero Documentation](https://github.com/viewflex/ligero-docs).

### Live Demo

[](#live-demo)

[![demo screenshot](img/screenshots/results-list-view.png)](img/screenshots/results-list-view.png)

The Items domain is a working demo provided in this package, implementing a very simple CRUD UI in plain HTML with Bootstrap.css, but of course the generated API data sent to the views could be presented using any front-end framework desired.

Listo provides a complete separation of presentation and application logic, and outputs results with all necessary data elements for dynamic UI components, pre-packaged in a standardized format. Use the 'Items &gt; Display as JSON' menu command to see what the raw data looks like.

#### Using the Demo as a Template

[](#using-the-demo-as-a-template)

See the [Publishing the Package Files](#publishing-the-package-files) subsection below to learn how to quickly scaffold new domains by publishing (copying) the demo and customizing it to suit the requirements.

#### Demo API Endpoints

[](#demo-api-endpoints)

Besides the UI controller used in the demo, there is also a ready-made Context and API controller serving the API routes for the same Items domain. The package `ContextApiController` can be used to serve any number of domain Contexts via route parameter keyed to the configured `$contexts` array.

Enhancements to Ligero
----------------------

[](#enhancements-to-ligero)

Listo adds some new UI elements to what's already available in the Ligero package. Please see the Ligero documentation to understand how dynamic UI controls are configured and used.

Additional highly configurable dynamic query controls are provided by this package, including:

- Breadcrumbs
- Query Menus
- Sort Menu

These are the upgraded interfaces, and the methods added to them:

### Config `PublisherConfigInterface`

[](#config-publisherconfiginterface)

This package's `Config/listo.php` file provides defaults for the global settings in `BasePublisherConfig`, and can be published (via artisan command) to the Laravel `config` directory for customization (see the [Customization](#customization) section below). If upgrading from Ligero to Listo, note that this config file will now be used instead of the `ligero.php` config file.

#### Domain Configuration

[](#domain-configuration)

##### Breadcrumbs

[](#breadcrumbs)

```
getBreadcrumbsConfig()
setBreadcrumbsConfig($breadcrumbs_config)
```

##### Query Menus

[](#query-menus)

```
getQueryMenusConfig()
setQueryMenusConfig($query_menus_config)
```

##### Sort Menu

[](#sort-menu)

```
getSortMenuConfig()
setSortMenuConfig($sort_menu_config)
```

### Publisher `PublisherInterface`

[](#publisher-publisherinterface)

#### Raw Data

[](#raw-data)

Get data for additional dynamic UI controls.

```
getBreadcrumbs()
getQueryMenus()
getSortMenu()
```

### PublisherApi `PublisherApiInterface`

[](#publisherapi-publisherapiinterface)

#### Raw Data

[](#raw-data-1)

Get data for additional dynamic UI controls.

```
getBreadcrumbs()
getQueryMenus()
getSortMenu()
```

### Repository `PublisherRepositoryInterface`

[](#repository-publisherrepositoryinterface)

#### Menu Building

[](#menu-building)

This command supports generation of query menus for individual columns, returning a list of distinct column values in `query` (in context of current query) or `global` (fresh search) scope. Supported column types: `string`, `number`, and `boolean`.

```
distinctColumn($name = 'id', $scope = 'query', $type = 'string')
```

#### Multi-Record List Actions

[](#multi-record-list-actions)

Additional list actions supported:

- Sort Higher
- Sort Lower
- Show
- Hide

Customization
-------------

[](#customization)

This package comes with a demo domain, 'Items', that provides examples of publishing a domain with both a UI controller and an API controller. This demo can be used without using `php artisan vendor:publish` to copy the files for modification, but to either play around with the demo 'Items' domain or create new domains for your application, just use the `publish` command with the `listo` tag (as described below).

Copy and rename the demo files you need and change the class names, to implement Publishers for custom domains. Copy and rename the resource files (views and lang), and customize as needed.

### Publishing the Package Files

[](#publishing-the-package-files)

The package service provider configures `artisan` to publish specific file groups with tags. There are several options available in this package.

#### Routes

[](#routes)

Run this command to publish the `routes.php` file to the project's `publish/viewflex/listo` directory for customization:

```
php artisan vendor:publish  --tag='listo-routes'
```

#### Config

[](#config)

Run this command to publish the `listo.php` config file to the project's `config` directory for customization:

```
php artisan vendor:publish  --tag='listo-config'
```

#### Resources

[](#resources)

Run this command to publish the blade templates for the demo UI, and lang files for package messages and UI strings:

```
php artisan vendor:publish  --tag='listo-resources'
```

#### Routes, Demo Migration and Seeder

[](#routes-demo-migration-and-seeder)

Run this command to install the migration and seeder for the 'Items' demo domain:

```
php artisan vendor:publish  --tag='listo-data'
```

After publishing the demo migration and seeder, run the migration:

```
php artisan migrate
```

Then run the seeder:

```
php artisan db:seed --class="ListoSeeder"
```

#### Routes, Config, Resources, Demo Migration and Seeder

[](#routes-config-resources-demo-migration-and-seeder)

Use this command to publish config, demo views, and lang files for modification. The demo migration and seeder are also copied to their proper directories:

```
php artisan vendor:publish  --tag='listo'
```

### Extending or Decorating Base Classes

[](#extending-or-decorating-base-classes)

Listo's architecture is based on distinct pattern of class types, each defined by an interface; since classes relate to each other as abstract types, you can easily substitute your own custom classes, provided that they implement the same interfaces. In fact, Listo follows the same strategy pattern as the Ligero package which it extends.

### Namespace for Custom Classes

[](#namespace-for-custom-classes)

The `Viewflex\Listo\Publish` namespace, corresponding to the `publish/viewflex/listo` directory, is recognized by the package, and is intended for organization of your custom classes. The Items demo classes will be published (copied) to this directory for customization.

Tests
-----

[](#tests)

The phpunit tests can be run in the usual way, as described in the [Test Documentation](TESTS.md).

License
-------

[](#license)

This software is offered for use under the [MIT License](LICENSE.md).

Changelog
---------

[](#changelog)

Release versions are tracked in the [Changelog](CHANGELOG.md).

###  Health Score

25

—

LowBetter than 37% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity3

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

2379d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/4b93f8b0a642b06fab7cd680ba7a56539f9b77e5c09fae9f26bfcc319128d794?d=identicon)[viewflex](/maintainers/viewflex)

---

Top Contributors

[![viewflex](https://avatars.githubusercontent.com/u/6198916?v=4)](https://github.com/viewflex "viewflex (7 commits)")

---

Tags

laraveluicrudbreadmenusdropdownsrich searchquery tools

### Embed Badge

![Health badge](/badges/viewflex-listo/health.svg)

```
[![Health](https://phpackages.com/badges/viewflex-listo/health.svg)](https://phpackages.com/packages/viewflex-listo)
```

###  Alternatives

[backpack/crud

Quickly build admin interfaces using Laravel, Bootstrap and JavaScript.

3.4k3.4M207](/packages/backpack-crud)[takielias/tablar-crud-generator

Laravel Tablar Crud Generator based on https://github.com/takielias/tablar

315.6k](/packages/takielias-tablar-crud-generator)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
