PHPackages                             arbory/arbory - 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. arbory/arbory

ActiveLibrary[Admin Panels](/categories/admin)

arbory/arbory
=============

Administration interface for Laravel

4.1.21(6mo ago)4752.8k↓36.5%32[10 PRs](https://github.com/arbory/arbory/pulls)3MITPHPPHP ^8.2|^8.3CI failing

Since Mar 24Pushed 3mo ago15 watchersCompare

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

READMEChangelog (10)Dependencies (15)Versions (155)Used By (3)

[![Packagist](https://camo.githubusercontent.com/7e79dadf5add1e906a807d020f5239d2b5a5150a83625e477669bb77a2ae262d/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6172626f72792f6172626f72792e737667)](https://packagist.org/packages/arbory/arbory)[![Scrutinizer Code Quality](https://camo.githubusercontent.com/0190b30d4a280d086ee7b1e0788b22eaeedfb4e3449beda0ea4ce83978ebad31/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6172626f72792f6172626f72792f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/arbory/arbory/?branch=master)[![Build Status](https://camo.githubusercontent.com/8f8d035f734898ed895427f3a0a2d5b97d9a9362f0a962c886c384a6dad92612/68747470733a2f2f7472617669732d63692e6f72672f6172626f72792f6172626f72792e7376673f6272616e63683d6d6173746572)](https://travis-ci.org/arbory/arbory)[![StyleCI](https://camo.githubusercontent.com/a2dfa3fcfa72b8a2c5c24d84aee327d93949e88449f4f5dcb134afed2a281e89/68747470733a2f2f6769746875622e7374796c6563692e696f2f7265706f732f34343734303133392f736869656c643f6272616e63683d6d6173746572267374796c653d666c6174)](https://github.styleci.io/repos/44740139)[![Coverage Status](https://camo.githubusercontent.com/bc94dab3786b08dc5f6b143362ba4f064ea416874bc0466405e4cb525d360ce9/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f6172626f72792f6172626f72792f62616467652e7376673f6272616e63683d6d6173746572)](https://coveralls.io/github/arbory/arbory?branch=master)

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

[](#installation)

#### Create new Laravel project

[](#create-new-laravel-project)

```
composer create-project --prefer-dist laravel/laravel=8.0 my-project
```

#### Go to project root

[](#go-to-project-root)

```
cd my-project
```

#### Require Arbory package

[](#require-arbory-package)

```
composer require arbory/arbory
```

#### Fill in database info

[](#fill-in-database-info)

```
vi .env
```

#### Run installer and follow instructions

[](#run-installer-and-follow-instructions)

```
php artisan arbory:install
```

#### That's it!

[](#thats-it)

```
Visit http://localhost/admin
```

Usage
-----

[](#usage)

### Registering new pages

[](#registering-new-pages)

```
Page::register( App\Pages\TextPage::class )
    ->fields( function( FieldSet $fieldSet )
    {
        $fieldSet->add( new Arbory\Base\Admin\Form\Fields\Richtext( 'text' ) );
    } )
    ->routes( function()
    {
        Route::get( '/', App\Http\Controllers\TextPageController::class . '@index' )->name( 'index' );
    } );
```

### Registering new admin modules

[](#registering-new-admin-modules)

```
Admin::modules()->register(  App\Http\Controllers\Admin\TextController::class );
```

### Working with nodes

[](#working-with-nodes)

The node repository is used to ensure that the website only displays active nodes to the user

```
$currentNode = app( Arbory\Base\Nodes\Node::class );
$nodes = app( Arbory\Base\Repositories\NodesRepository::class );

// returns only the active children of the current node
$nodes->findUnder( $currentNode );
```

Validation
----------

[](#validation)

[Validation rules](https://laravel.com/docs/5.8/validation) can be attached to any field, like so

```
$form->addField( new Text( 'title' ) )->setRules( 'required' );
```

### Validating translations

[](#validating-translations)

```
$form->addField( new Translatable( ( new Text( 'title' ) )->rules( 'required' ) ) );
```

### Custom validators

[](#custom-validators)

- arbory\_require\_one\_localized - at least one translation exists for this field
- arbory\_file\_required - file has been uploaded or is being passed in request

Fields
------

[](#fields)

### Object Relation

[](#object-relation)

Create a relation to another model

```
new Arbory\Base\Admin\Form\Fields\ObjectRelation( 'field_name', Arbory\Base\Nodes\Node::class );
```

To limit the amount of relations the user can select a third argument can be passed. Relation fields limited to a single model will be rendered more compactly.

```
new ObjectRelation( 'field_name', Arbory\Base\Nodes\Node::class, 1 ); // single relation, compact view
new ObjectRelation( 'field_name', Arbory\Base\Nodes\Node::class, 10 );
```

An optional depth parameter can be passed (automatically set for the node relation) which adds visual nesting to the field items

```
( new ObjectRelation( 'field_name', Arbory\Base\Nodes\Node::class ) )->setIndentAttribute( 'depth' );
```

Items can be grouped by an attribute

```
$getName = function( \Arbory\Base\Nodes\Node $model )
{
    return class_basename( $model->content_type );
};

( new ObjectRelation( 'field_name', Arbory\Base\Nodes\Node::class ) )->groupBy( 'content_type', $getName );
```

Settings
--------

[](#settings)

Register a setting (with optional nesting) and retrieve it

```
return [
    'my_letter' => [
        'to' => 'a friend',
        'subject' => 'Hello!'
    ]
]
```

```
Settings::has('my_letter.to'); // true
Settings::get('my_letter.to'); // "a friend"
```

### Defining a field type

[](#defining-a-field-type)

```
return [
    'my_setting_key' => [
        'value' => 'My setting value',
        'type' => Arbory\Base\Admin\Form\Fields\CompactRichtext::class
    ],
]
```

### File settings

[](#file-settings)

```
return [
    'my_setting_file' => [
        'value' => null,
        'type' => Arbory\Base\Admin\Form\Fields\ArboryFile::class
    ],
    'my_setting_image' => [
        'value' => null,
        'type' => Arbory\Base\Admin\Form\Fields\ArboryImage::class
    ],
]
```

### Translatable settings

[](#translatable-settings)

```
return [
    'hello' => [
        'type' => Arbory\Base\Admin\Form\Fields\Translatable::class,
        'value' => [
            'type' => Arbory\Base\Admin\Form\Fields\CompactRichtext::class,
            'value' => [
                'en' => 'Hello',
                'lv' => 'Sveiks'
            ]
        ]
    ],
]
```

Generate admin User
-------------------

[](#generate-admin-user)

```
php artisan arbory:create-user
```

Contributing
============

[](#contributing)

To submit SCSS/Js changes you must rebuild `dist` directory containing compiled assets. Run `npm run prod` to do that.

Coding style
------------

[](#coding-style)

Use PSR-1/2

### JS

[](#js)

We use `airbnb` coding style for both JS and SASS (links below).

To install the built-in inspections for PHPStorm, follow these instructions:

#### Note!

[](#note)

When specifying JSCS package in the configuration window, it has to be installed locally (within the project). Global installation will not work (PHPStorm installs packages globally).

#### Customization

[](#customization)

Rules can be modified either in separate files (`.jscsrc` or `.jscs.json` in project's root directory) or project's `package.json` file (`jscsConfig` section).

#### Links:

[](#links)

- JS -
- CSS / SASS -

###  Health Score

66

—

FairBetter than 99% of packages

Maintenance75

Regular maintenance activity

Popularity43

Moderate usage in the ecosystem

Community38

Small or concentrated contributor base

Maturity96

Battle-tested with a long release history

 Bus Factor3

3 contributors hold 50%+ of commits

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 ~24 days

Recently: every ~36 days

Total

130

Last Release

195d ago

Major Versions

3.3.5 → 4.1.52024-11-20

3.3.6 → 4.1.62024-11-21

3.3.7 → 4.1.82025-02-04

3.3.8 → 4.1.142025-03-03

3.3.9 → 4.1.192025-07-03

PHP version history (6 changes)0.1.2PHP ^7.0

0.2.10PHP ^7.1

1.0PHP ^7.2

2.0.0PHP ^8.0

2.1.0PHP ^8.1

4.0.2PHP ^8.2|^8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/686243?v=4)[Miks Miķelsons](/maintainers/miks)[@miks](https://github.com/miks)

![](https://www.gravatar.com/avatar/0aa63cee30e6b12ba255a61038365fec0e8acb63ddc409f1dfbe802d7845993d?d=identicon)[roboc](/maintainers/roboc)

![](https://avatars.githubusercontent.com/u/9839442?v=4)[holystix](/maintainers/holystix)[@holystix](https://github.com/holystix)

![](https://www.gravatar.com/avatar/1a50386930032aa05af6316c386e7c3a224799069bb4e19d7e211de0bc9e04c4?d=identicon)[exabyssus](/maintainers/exabyssus)

![](https://www.gravatar.com/avatar/86926a43e53b54cb717334de275b76b0032575c1cffe145ac6561e937ca30010?d=identicon)[strads10](/maintainers/strads10)

![](https://avatars.githubusercontent.com/u/3168975?v=4)[cliche23](/maintainers/cliche23)[@cliche23](https://github.com/cliche23)

---

Top Contributors

[![strads10](https://avatars.githubusercontent.com/u/1344811?v=4)](https://github.com/strads10 "strads10 (387 commits)")[![roboc](https://avatars.githubusercontent.com/u/769727?v=4)](https://github.com/roboc "roboc (321 commits)")[![exabyssus](https://avatars.githubusercontent.com/u/6299387?v=4)](https://github.com/exabyssus "exabyssus (162 commits)")[![rerzy](https://avatars.githubusercontent.com/u/1071453?v=4)](https://github.com/rerzy "rerzy (135 commits)")[![eddyonboard](https://avatars.githubusercontent.com/u/21238475?v=4)](https://github.com/eddyonboard "eddyonboard (58 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (57 commits)")[![Gberzi01](https://avatars.githubusercontent.com/u/20438036?v=4)](https://github.com/Gberzi01 "Gberzi01 (52 commits)")[![miks](https://avatars.githubusercontent.com/u/686243?v=4)](https://github.com/miks "miks (51 commits)")[![ausminja](https://avatars.githubusercontent.com/u/44100591?v=4)](https://github.com/ausminja "ausminja (35 commits)")[![kristsk](https://avatars.githubusercontent.com/u/310808?v=4)](https://github.com/kristsk "kristsk (32 commits)")[![kalvisbuls](https://avatars.githubusercontent.com/u/6388898?v=4)](https://github.com/kalvisbuls "kalvisbuls (29 commits)")[![cliche23](https://avatars.githubusercontent.com/u/3168975?v=4)](https://github.com/cliche23 "cliche23 (20 commits)")[![sabineabele](https://avatars.githubusercontent.com/u/50020884?v=4)](https://github.com/sabineabele "sabineabele (19 commits)")[![holystix](https://avatars.githubusercontent.com/u/9839442?v=4)](https://github.com/holystix "holystix (17 commits)")[![dmitrijsmihailovs](https://avatars.githubusercontent.com/u/6555569?v=4)](https://github.com/dmitrijsmihailovs "dmitrijsmihailovs (16 commits)")[![cube-ausma](https://avatars.githubusercontent.com/u/39091573?v=4)](https://github.com/cube-ausma "cube-ausma (10 commits)")[![RihardsZ](https://avatars.githubusercontent.com/u/3199845?v=4)](https://github.com/RihardsZ "RihardsZ (7 commits)")[![KrissKulins](https://avatars.githubusercontent.com/u/17312078?v=4)](https://github.com/KrissKulins "KrissKulins (7 commits)")[![ziggycrane](https://avatars.githubusercontent.com/u/3503868?v=4)](https://github.com/ziggycrane "ziggycrane (5 commits)")[![ubrize](https://avatars.githubusercontent.com/u/7387558?v=4)](https://github.com/ubrize "ubrize (3 commits)")

---

Tags

laravelcmsadminarbory

###  Code Quality

TestsPHPUnit

### Embed Badge

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

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

PHPackages © 2026

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