Install the Bundle Run:
composer require babaganoush/foundation-bundle:~5.5
Update AppKernel.php to register the bundle:
public function registerBundles()
{
$bundles = [
// ...
new Babaganoush\FoundationBundle\BabaganoushFoundationBundle(),
];
}
Install Assets
Symlink Foundation assets to your web/ directory:
php app/console assets:install --symlink web
First Use Case: Basic Grid Layout Include Foundation CSS/JS in a Twig template:
<link rel="stylesheet" href="{{ asset('bundles/babaganoushfoundation/css/foundation.min.css') }}">
<script src="{{ asset('bundles/bmatznerjquery/js/jquery.min.js') }}"></script>
<script src="{{ asset('bundles/babaganoushfoundation/js/foundation.min.js') }}"></script>
<div class="row">
<div class="small-6 columns">Column 1</div>
<div class="small-6 columns">Column 2</div>
</div>
Responsive Layouts
Use Foundation’s grid system (e.g., small-6, medium-4) in Twig:
{% block body %}
<div class="row">
<div class="small-12 medium-8 columns">
{# Main content #}
</div>
<div class="small-12 medium-4 columns">
{# Sidebar #}
</div>
</div>
{% endblock %}
JavaScript Components Initialize Foundation JS components (e.g., dropdowns, tooltips) via:
$(document).foundation();
Or target specific components:
$(document).foundation('dropdown', 'reflow');
Asset Organization
app/Resources/public/css/ and override via @import in your main stylesheet.foundation.min.js.Twig Extensions Create a custom Twig extension for reusable Foundation classes:
// src/AppBundle/Twig/FoundationExtension.php
class FoundationExtension extends \Twig_Extension
{
public function getFunctions()
{
return [
new \Twig_SimpleFunction('foundation_grid', [$this, 'gridClass']),
];
}
public function gridClass($size, $breakpoint = 'small')
{
return "{$breakpoint}-{$size} columns";
}
}
Usage in Twig:
<div class="{{ foundation_grid(6) }}">Content</div>
Integration with Symfony Forms
Use Foundation’s form styling classes (e.g., error, prefix, suffix) in Twig:
{{ form_widget(form.name, { 'class': 'input-field' }) }}
<span class="help-text">{{ form.name.vars.label }}</span>
Asset Paths
/bundles/babaganoushfoundation/...) breaks when deploying to subdirectories.{{ asset() }} or {% block stylesheets %}/{% block javascripts %}.jQuery Dependency
jquery.min.js before foundation.min.js causes JS errors.{% block javascripts %} to ensure jQuery loads first.Outdated Foundation Version
web/bundles/ and updating manually.CSS Conflicts
<link rel="stylesheet" href="{{ asset('css/custom.css') }}">
Modernizr Dependency
Console Errors
$(document).foundation(); // Runs after DOM is ready.
$(document).foundation('alert'); to debug component initialization.Asset Installation
ls -la web/bundles/babaganoushfoundation
php app/console cache:clear --env=prod
Breakpoints
small, medium, large, and xlarge. Test responsiveness with browser dev tools.Custom JavaScript Extend Foundation by adding custom plugins. Example:
// web/js/custom.js
$.fn.myPlugin = function() {
// Custom logic
return this;
};
Include after foundation.min.js:
<script src="{{ asset('js/custom.js') }}"></script>
Sass Integration Compile Foundation SCSS for better customization:
npm install -g node-sass.app/Resources/assets/scss/foundation/_settings.scss.node-sass app/Resources/assets/scss/foundation.scss web/css/foundation-custom.css
Symfony Flex Alternative For newer Symfony projects, consider using Webpack Encore to bundle Foundation via npm:
npm install foundation-sites --save-dev
Configure in webpack.config.js and import in your JS entry file.
Accessibility
php app/console assets:install --env=prod --symlink
{% block %} to wrap Foundation components for consistent theming.WebTestCase to verify Foundation JS interactions:
$client->executeScript('$(document).foundation("dropdown", "open");');
How can I help you explore Laravel packages today?