This extension can embed rich content (like videos, tweets, etc.) from other websites.
The syntax is very simple - simply place any
https:// URL on its own line like this:
Check out this video! https://www.youtube.com/watch?v=dQw4w9WgXcQ
If the link points to embeddable content, it will be replaced with the rich HTML needed to embed it:
<p>Check out this video:</p> <iframe width="200" height="113" src="https://www.youtube.com/embed/dQw4w9WgXcQ?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
This extension is bundled with
league/commonmark. This library can be installed via Composer:
composer require league/commonmark
You’ll also need to install a third-party OEmbed library - see the Adapter section below.
Environment as usual and add the
EmbedExtension provided by this package:
use Embed\Embed; use League\CommonMark\Environment\Environment; use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension; use League\CommonMark\Extension\Embed\EmbedExtension; use League\CommonMark\MarkdownConverter; // Define your configuration $config = [ 'embed' => [ 'adapter' => new OscaroteroEmbedAdapter(), // See the "Adapter" documentation below 'allowed_domains' => ['youtube.com', 'twitter.com', 'github.com'], 'fallback' => 'link', ], ]; // Configure the Environment with all whatever other extensions you want $environment = new Environment($config); $environment->addExtension(new CommonMarkCoreExtension()); // Add this extension $environment->addExtension(new EmbedExtension()); // Instantiate the converter engine and start converting some Markdown! $converter = new MarkdownConverter($environment); echo $converter->convert('https://www.youtube.com/watch?v=dQw4w9WgXcQ');
This extension supports the following configuration options under the
Any instance of
EmbedAdapterInterface - see the “Adapter” section below.
This option defines a list of hosts that you wish to allow embedding content from. For example, setting this to
['youtube.com'] would only allow videos from YouTube to be embedded.
It’s extremely important that you only include websites you trust since they’ll be providing HTML that is directly embedded in your website.
Any subdomains of these domains will also be allowed. For example,
['youtube.com'] would allow embedding from
As an additional safety measure, we recommend that you also use a Content Security Policy (CSP) to prevent unexpected content from being embedded.
By default, this option is an empty array (
), which means that all domains are allowed.
This options defines the behavior when a URL cannot be embedded, either because it’s not in the list of
or because the
adapter could not find embeddable content for that URL.
There are two possible values for this option:
'link'- the URL will be kept in the document as a link (default) -
'remove'- the URL will be completely removed from the document
league/commonmark doesn’t know how to obtain the embeddable HTML for a given URL - this must be done by an external library.
We do provide an adapter for the popular
embed/embed library. if you’d like to use that. We like this library
because it supports fetching multiple URLs in parallel, which is ideal for performance, and it supports a wide range
of embeddable content.
To use that library, you’ll need to
composer install embed/embed and then pass
new OscaroteroEmbedAdapter() as the
configuration option, as shown in the Usage section above.
Need to customize the maximum width/height of the embedded content? You can do that by instantiating the service provided by
embed/embed, configuring it as needed, and passing that customized instance into the adapter:
use Embed\Embed; use League\CommonMark\Extension\Embed\Bridge\OscaroteroEmbedAdapter; // Configure the Embed library itself $embedLibrary = new Embed(); $embedLibrary->setSettings([ 'oembed:query_parameters' => [ 'maxwidth' => 800, 'maxheight' => 600, ], 'twitch:parent' => 'example.com', 'facebook:token' => '1234|5678', 'instagram:token' => '1234|5678', 'twitter:token' => 'asdf', ]); // Inject it into our adapter $config = [ 'adapter' => new OscaroteroEmbedAdapter($embedLibrary), ]; // Instantiate your CommonMark environment and converter like usual // ...
If you prefer to use a different library, you’ll need to implement our
EmbedAdapterInterface yourself with
whatever OEmbed library you choose.
If you need to wrap the HTML in a container tag, consider using the
$environment->addRenderer(Embed::class, new HtmlDecorator(new EmbedRenderer(), 'div', ['class' => 'embeded-content']));
Edit this page