Use Twitter Bootstrap in Symfony2 with Composer
UPDATE
** An updated version can be found here ** https://www.jverdeyen.be/symfony2/bootswatch-bootstrap-symfony2/
A small getting-started guide on how to use/install Twitter Bootstrap in a Symfony2 project.
composer.json
First of all, add the twitter bootstrap repository into your composer.json
"repositories": [
{
"type": "package",
"package": {
"version": "2.2.1",
"name": "twitter/bootstrap",
"source": {
"url": "https://github.com/twitter/bootstrap.git",
"type": "git",
"reference": "master"
},
"dist": {
"url": "https://github.com/twitter/bootstrap/zipball/master",
"type": "zip"
}
}
}
]
you might also want to add the jquery repository as you will need this to run the bootstrap js files
Add the following in your required section
"require": {
..
"symfony/assetic-bundle": "2.1.*",
"leafo/lessphp": "*",
"twitter/bootstrap": "*",
...
},
Run composer update to get the packages you need.
config.yml
I prefer using a separate assetic.yml and include this in your config.yml file.
You will have to download cssembed and yuicompressor.
cssembed
yuicompressor
assetic:
java: /usr/bin/java
filters:
cssembed:
jar: %kernel.root_dir%/Resources/java/cssembed-0.4.5.jar
yui_js:
jar: %kernel.root_dir%/Resources/java/yuicompressor.jar
lessphp:
file: %kernel.root_dir%/../vendor/leafo/lessphp/lessc.inc.php
apply_to: "\.less$"
assets:
jquery_js:
inputs:
- '%kernel.root_dir%/app/Resources/public/js/vendor/jquery.js'
filters: [?yui_js]
bootstrap_js:
inputs:
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-transition.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-alert.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-modal.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-dropdown.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-scrollspy.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-tab.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-tooltip.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-popover.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-button.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-collapse.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-carousel.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-typeahead.js'
- '%kernel.root_dir%/../vendor/twitter/bootstrap/js/bootstrap-affix.js'
filters: [?yui_js]
bootstrap_less:
inputs:
- '%kernel.root_dir%/../vendor/twitter/bootstrap/less/bootstrap.less'
filters: [lessphp,cssembed]
layout.html.twig
To get this thing rollin' we need to add these assets into our layout template (or any other)
{% block javascripts %}
{% javascripts '@jquery_js' '@bootstrap_js' filter='?yui_js' combine=true %}
<script src="{{ asset_url }}"></script>
{% endjavascripts %}
{% endblock %}
{% block stylesheets %}
{% stylesheets '@bootstrap_less' combine=true %}
<link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}
{% endblock %}
This should do the trick!
Written by Joeri Verdeyen
Related protips
18 Responses
Thank you! You're the man!
Do you know how i can include those touch icons:
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="../assets/ico/apple-touch-icon-144-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="114x114" href="../assets/ico/apple-touch-icon-114-precomposed.png">
<link rel="apple-touch-icon-precomposed" sizes="72x72" href="../assets/ico/apple-touch-icon-72-precomposed.png">
<link rel="apple-touch-icon-precomposed" href="../assets/ico/apple-touch-icon-57-precomposed.png">
<link rel="shortcut icon" href="../assets/ico/favicon.png">
How do you mean?
I already found a solution. Thanks.
Good article!
By the way, you don't have to add the twitter bootstrap into your repository as it already exists in Packagist repository, i.e. you only need to add it to the requrie section:
require: "twitter/bootstrap": "dev-3.0.0-wip"
This seems like a good approach but how do you then go about modifying/overriding Bootsrap Less in your own bundle? I was planing to keep all my less and bootstrap less files in one less subdirectory and import the bootstrap less and my own less files in to one master file
Man! You ROCKS! Thank you so much!
I should update this pro tip
sooner or later, indeed using packagist etc.
Note that there are also repositories with bootstrap bundles..
Where would I put the cssembed and yuicompressor jar files?
@imjeremulle
You can put these jars wherever you want, most of the time I just put them into app/Resources/java/.. but that doesn't matter. These are used for all bundles so it's best to place them in your global Resources.
Great, thank you! Just what I needed
But I've the same problem @richlove1 commented. How do I come to include a 'custom.less' on my own bundle, been able to access from it to the variables and mixins on the vendor/twitter/bootstrap directory. I can't find a way
Great Article.
Thanks!
it does not work
Hi thanks for sharing knowledge i have noticed that this post is most popular among all other post on bootstrap and symfony
i am totally new to symfony2 i have question about your post why we need to do all the things like config.yml , cssembed yuicompressor can we just simply copy bootstrap css and js to resource folder and just linked to main template
e.g:
<link href="{{ asset('css/bootstrap.min.css') }}" rel="stylesheet" type="text/css" />
<script src="{{ asset('js/jquery-1.11.0.min.js') }}" ></script>
<script src="{{ asset('js/bootstrap.min.js') }}" ></script>
i know it is stupid question for you but i am confused about that why we need to long coding and what is benefits of it ?
Thank you very much
Vishal
I'm rewriting this in a blog post. I'll post it here for an update.
I've been confused with not getting less files compiled in windows. I found that java location should be C:\Program Files\Java\jre7\bin\java.exe then its working fine. Think this will help windows users. Thanks for the guide.
I've created an updated version, which can be found here:
https://www.jverdeyen.be/symfony2/bootswatch-bootstrap-symfony2/
To just load CSS and JS from the vendor into the view using assetic:
https://gist.github.com/elvisciotti/7e25185d1398779a13505a77b3c2adec