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

2.4.0 2017-07-22 19:00 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',
        'inherit' => 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