Theme support for Laravel 4/5 with assets, theme extends etc.

Installs: 2 761

Dependents: 3

Suggesters: 0

Stars: 44

Watchers: 4

Forks: 11

Open Issues: 2

2.2.0 2016-01-06 20:08 UTC


Inspired by bigecko/laravel-theme. Themes are stored inside default laravel's resources folder

For Laravel 4, please use the 1.* branch!


Require this package in your composer.json:

"yaap/theme": "2.*"

And add the ServiceProvider to the providers array in config/app.php


Publish config using artisan CLI (if you want to overwrite default config).

php artisan vendor:publish --tag="config"

You can register the facade in the aliases key of your config/app.php file.

'aliases' => array(
    'Theme' => 'YAAP\Theme\Facades\Theme'

Package config

    return array(
        'path'          => base_path('resources/themes'),
        'assets_path'   => 'assets/themes',

Theme config

    return array(
        'name'         => 'default',
        'parent_theme' => null,



├── resources/
    └── themes/
        ├── default/
        |   ├── layouts/
            ├── partials/
            ├── views/
            |   └── hello.blade.php
            └── config.php

        └── admin/

    ├── views/
    |   ├── emails/
    |   |   └── notify.blade.php
    |   └── hello.blade.php
    └── lang/

├── public/assets/
    └── themes/
        └── default/
            ├── css/
            |   └── styles.css
            └── images/
                └── icon.png

Create theme with artisan CLI

The first time you have to create theme "default" structure, using the artisan command:

php artisan theme:create default

To delete an existing theme, use the command:

php artisan theme:destroy default

Init theme


This will add to views find path:

  • resources/themes/{$name}
  • resources/themes/{$name}/views

Making view



Assets can be nested too. Asset url can be automatically with version.

<link rel="stylesheet" href="{{ Theme::asset('css/styles.css', null, true) }}"/>
<link rel="stylesheet" href="{{ Theme::asset('css/ie.css', null, 'v1') }}"/>

The first one will get version from filemtime, the second one - from params

Blade templates




        <section id="main">


Fallback capability

You still able to use default View::make('emails.notify') which is stored outside the themes directory