Developed with love by KnpLabs Hire us for your project!
33

TerrificComposerBundle

by brunschgi

Symfony2 Terrific Composer Bundle

TerrificComposerBundle

Build Status

The TerrificComposer bundle makes it easy to develop frontends based on the Terrific Concept.
It provides you several helpers and tools to streamline your frontend development.

The TerrificComposer bundle depends on the TerrificCoreBundle.
For installation of the TerrificCoreBundle, please follow the instructions there.

Installation

TerrificComposerBundle can be conveniently installed via Composer. Just add the following to your composer.json file:

// composer.json
{
    // ...
    require: {
        // ...
        "brunschgi/terrific-composer-bundle": "dev-master"
    }
}

Note: Please replace dev-master in the snippet above with the latest stable branch, for example 1.0.*. Please check the tags on Github for which versions are available.
Then, you can install the new dependencies by running Composer’s update command from the directory where your composer.json file is located:

php composer.phar update

Now, Composer will automatically download all required files, and install them for you. All that is left to do is to update your AppKernel.php file, and register the new bundle:

// in AppKernel::registerBundles()
public function registerBundles()
{
    return array(
        // ...
        new Terrific\ComposerBundle\TerrificComposerBundle(),
    );
}

TerrificComposer creates a bundle for each of your Terrific module. To have them registered automatically, extend app/AppKernel.php:

// register all terrific modules
$dir = __DIR__.'/../src/Terrific/Module/';

$finder = new Finder();
$finder->directories()->in($dir)->depth('== 0');

foreach ($finder as $file) {
    $filename = $file->getFilename();
    $module = 'Terrific\Module\\'.$filename.'\TerrificModule'.$filename;
    $bundles[] = new $module();
}

Import the routing definition in routing.yml:

# app/config/routing.yml
TerrificComposerBundle:
    resource: "@TerrificComposerBundle/Controller/"
    type:     annotation
    prefix:   /terrific/composer

Enable the bundle's configuration in app/config/config.yml and app/config/config_dev.yml:

# app/config/config.yml
terrific_composer:
   composition_bundles: [@TerrificComposition] # optional|default=@TerrificComposition – the bundles where the controllers for your frontend lie
   module_layout: @TerrificComposition::base.html.twig # optional|default=@TerrificComposition::base.html.twig – the layout to take for the separate module view
   module_template: /path/to/your/module/template # optional|default=/path/to/TerrificComposerBundle/Template/Module -> extend or add additional module resources (ie. README.md)

# app/config/config_dev.yml
terrific_composer:
    toolbar: true # enables the composer toolbar in the dev environment

Usage

To see the TerrificComposerBundle in action, download the Terrific Composer Distribution
and play around with the included examples. For more information about the Terrific Concept, please have a look at http://terrifically.org

After that, the below should be pretty straight forward ;-)

Terrific Composer Toolbar

The Toolbar provides you some useful helpers that helps you to streamline your frontend development.

Module / Skin Creation

Create module bundles (with or without skin) under /src/Terrific/Module/.

Notice: If you don't use the Terrific Composer Distribution, you have to
register the created modules manually in app/AppKernel.php

The generated module structure contains the skeleton of the LESS/JavaScript files in Terrific
manner, so that you can start right away.

Open Resources

The open dialog provides you quick access to your modules and pages. By clicking on a module you are able to implement
and test it isolated from the rest of your page. Furthermore you can play with different widths, templates and skins.

Inspect Mode

The inspect mode shows you the used modules on the current page.

The Composer() annotation

The bundle provides an Composer() annotation for your controllers:

<?php

namespace Terrific\Composition\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Terrific\ComposerBundle\Annotation\Composer;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;

class DefaultController extends Controller
{
    /**
     * @Composer("Welcome")
     * @Route("/", name="home")
     * @Template()
     */
    public function indexAction()
    {
        return array();
    }

    /**
     * @Composer("Examples Overview")
     * @Route("/examples", name="examples")
     * @Template()
     */
    public function examplesAction()
    {
        return array();
    }
}

The Composer annotation is used to enrich the open dialog with meaningful page names.

That's it… Enjoy!

Copyright (c) 2011 Remo Brunschwiler, http://terrifically.org

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:

The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
terrific_composer:
toolbar: false
composition_bundles:

# Default:
- @TerrificComposition
module_layout: TerrificComposition::base.html.twig
module_template: ~