Creating a ready-to-use symfony 2 application zip Creating a ready-to-use symfony 2 application zip symfony symfony

Creating a ready-to-use symfony 2 application zip


Dumping to a given filename

( assetic's output option )

You are able to configure your asset collection's to dump to a given filename. This can be achieved inside twig with the output option. No more auto-generated filenames like 7cb568e.js.

example:

{% stylesheets     'bundles/mlabsacraserver/stylesheets/*'     filter='cssrewrite'    output='css/stylesheets.css'%}    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />{% endstylesheets %}

... or javascripts ...

{% javascripts      'bundles/mlabsacraserver/js/jquery.min.js'    'bundles/mlabsacraserver/js/*'     output='js/javascripts.js'%}    <script src="{{ asset_url }}" type="text/javascript"></script>{% endjavascripts %}

Now assetic will dump your assets to js/javascripts.js and css/stylesheets.css using the given filters.

The base path where assetic will dump these assets can be configured in your config.yml with assetic.write_to and defaults.to the web/ folder.

pre-configured asset-collections

you can do even better and keep your code more structured.You can define asset collections inside your config.yml ( or another imported config file ).

The configuration can be found under assetic.assets

example:

# app/config.ymlassetic:    # ...    assets:        js_main:            inputs:                - "bundles/mlabsacraserver/js/jquery.min.js"                - "bundles/mlabsacraserver/js/*"            output: js/javascripts.js        css_main:            inputs:                - "bundles/mlabsacraserver/stylesheets/*"               filters:                 - cssrewrite                 # ...add more if you like            output: css/stylesheets.css

Now you can use these collections inside your twig templates using assetic's asset() function and the @-syntax with the corresponding collection names.

example:

<link href="{{ asset('@css_main') }}" type="text/css" rel="stylesheet" />

... and ...

<script src="{{ asset('@js_main') }}" type="text/javascript"></script>

This way you can configure where assetic shall look for your assets , change the names with a single configuration parameter and keep this logic outside of your templates, making them more readable and easier to maintain.

example resulting output:

 <link href="/web/css/stylesheets.css" type="text/css" rel="stylesheet" /> <script src="/web/js/javascripts.js" type="text/javascript"></script>

You now have a single configuration point in your application where you add and remove assets using collections and then just use their reference name in your templates.

further improvements for the deployment

You can have your users enter their MySQL host, user and password and let symfony write the parameters file for you.

This is what the symfony standard-edition does using SensioDistributionBundle when you first access your application .

The class performing the actual writing of the parameters.yml is Sensio\DistributionBundle\Configurator\Configurator.

use Sensio\DistributionBundle\Configurator\Configurator;

Now use the configurator in your Installation Controller.

   $configurator = new Configurator($this->get('kernel')->getRootDir());   $configurator->mergeParameters(array(        'my_parameter' = 'my_value',        'my_parameter2' = 'my_value2',   ));  $configurator->write();}

The best thing will be looking at the Configurator class itself to understand how it works.

can i haz bounty now? ;-)


If it not critical to you, its possible do not use assetic at all and not combine all assetic files into one. You lose all features like minify, combining and others. Instead you no longer need to run php app/console assetic:dump --env=prod --no-debug.

To do that - run php app/console assets:install web. It copy all your assets to web/bundles folder. Then in base.html.twig template you can include your assets manually.

{% block stylesheets %}    <link href="{{ asset('bundles/mlabsacraserverbundle/stylesheets/style.css') }}" rel="stylesheet" media="screen">    ...{% endblock %}{% block javascripts %}    <script src="{{ asset('bundles/mlabsacraserverbundle/js/jquery.min.js')}}"></script>    ...{% endblock %}

This is simlpest way to solve your problem.


Other way is to call command from php code like described in documentation here and live example here. You can make an install page, where run this command and install assets.


What is the html saying? are your asset paths generated correctly ?

And I see a: "php app/console assets:install --env=prod --no-debug"

so actually the css should be there.

Maybe you try the command with your web dir.wich copies over the css from your Resources/Public folder to your web/bundlename/...

"php app/console assets:install web"

or is it just the same ?