Installation:
composer.json under "require":
"bmatzner/mediaelement-bundle": "*"
composer update bmatzner/mediaelement-bundle.AppKernel.php:
new Bmatzner\MediaElementBundle\BmatznerMediaElementBundle(),
php app/console assets:install web --symlink
First Use Case:
<link rel="stylesheet" href="{{ asset('bundles/bmatznermediaelement/mediaelementplayer.min.css') }}">
<script src="{{ asset('bundles/bmatznerjquery/js/jquery.min.js') }}"></script>
<script src="{{ asset('bundles/bmatznermediaelement/mediaelement-and-player.min.js') }}"></script>
<video> or <audio> element:
<video id="player" width="640" height="270" controls>
<source src="{{ asset('path/to/video.mp4') }}" type="video/mp4">
</video>
<script>
$(document).ready(function() {
$('#player').mediaElementPlayer();
});
</script>
web/bundles/bmatznermediaelement/ after installation.Dynamic Media Initialization:
.each() to initialize multiple players:
$('.media-player').mediaElementPlayer({
success: function() {
console.log('Player ready');
}
});
Configuration via Twig:
<script>
$('#player').mediaElementPlayer({{ player_options|raw }});
</script>
(Define player_options in a Twig extension or controller.)Asset Versioning:
<script src="{{ asset('bundles/bmatznermediaelement/mediaelement-and-player.min.js?v='~version) }}"></script>
Symfony Forms + MediaElement:
EntityType or FileType fields to upload media, then render players in Twig:
{{ form_widget(form.videoField) }}
<video id="preview-player" controls></video>
<script>
$('#preview-player').mediaElementPlayer({ src: "{{ asset(form.videoField.vars.value) }}" });
</script>
API-Driven Media:
$.get('/api/media', function(data) {
$('#player').mediaElementPlayer({ src: data.url });
});
Twig Extensions:
// src/App/Twig/MediaExtension.php
public function mediaPlayer($id, $src, $options = []) {
return $this->render('BmatznerMediaElementBundle:Player:player.html.twig', [
'id' => $id,
'src' => $src,
'options' => $options,
]);
}
Register in services.yml and use in Twig:
{{ media_player('player1', asset('video.mp4'), { autoplay: true }) }}
AppKernel.php with Laravel’s config/app.php service providers (if porting from Symfony).assets:install.mediaelementplayer errors (e.g., missing jQuery or CSS).web/bundles/bmatznermediaelement/.Asset Paths:
assets:install isn’t run or symlinks break.--symlink and verify web/bundles/ directory exists.mix.copy() in webpack.mix.js.jQuery Dependency:
bundles/bmatznerjquery/js/jquery.min.js is the only jQuery instance.Deprecated Symfony2:
AppKernel, assets:install).{{ asset() }} with Laravel’s asset() helper.assets:install (use npm install + mix.copy instead).MediaElement Version:
web/bundles/bmatznermediaelement/.Uncaught TypeError: $(...).mediaElementPlayer is not a function → Missing jQuery or JS file.GET http://.../mediaelementplayer.min.css 404 → Asset path incorrect; check assets:install.mediaelementplayer.min.css, jquery.min.js, mediaelement-and-player.min.js) load with 200 OK.mediaelementplayer.min.css to your project and modifying it.addEventListener for custom events).Player/player.html.twig) in Resources/views/BmatznerMediaElementBundle/.$('#player').mediaElementPlayer({
pluginPath: '/custom/plugins/',
shimScriptAccess: true,
success: function() { /* custom logic */ }
});
// app/Providers/AppServiceProvider.php
public function boot() {
view()->composer('*', function ($view) {
$view->with('mediaelementConfig', ['autoplay' => true]);
});
}
Use in Twig:
<script>
$('#player').mediaElementPlayer({{ mediaelementConfig|json_encode|raw }});
</script>
How can I help you explore Laravel packages today?