Astina Deadlink Bundle
Symfony bundle that provides services to find broken link URLs., (*1)
Installation
Step 1: Add to composer.json
"require": {
"astina/deadlink-bundle":"dev-master",
}
Step 2: Enable the bundle
Enable the bundle in the kernel:, (*2)
<?php
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Astina\Bundle\DeadlinkBundle\AstinaDeadlinkBundle(),
);
}
Usage
The bundle provides a command (astina:deadlink:check
) that checks so called "link sources" for broken links and dispatches a BrokenLinksEvent
if one or more broken links are found for a given source., (*3)
To create a link source:, (*4)
- Create a class that implements
Astina\Bundle\DeadlinkBundle\Link\LinkSourceInterface
.
- Configure that class as a service and tag it as
astina_deadlink.link_source
.
To react to broken links:, (*5)
- Create an event listener.
- Listen to the
astina_deadlink.broken_links
event.
Example:, (*6)
<service id="deadlink_listener" class="Acme\FooBundle\DeadlinkListener">
<tag name="kernel.event_listener" event="astina_deadlink.broken_links" method="onBrokenLinks" />
</service>
namespace Acme\FooBundle;
use Astina\Bundle\DeadlinkBundle\Event\BrokenLinksEvent;
class DeadlinkListener
{
public function onBrokenLinks(BrokenLinksEvent $event)
{
// ZOMG!
}
}
This bundle comes with a LoggingListener
which logs broken links. In the logger config you can then decide what to do with the log message., (*7)
Example:, (*8)
services:
astina_deadlink.listener.logger:
class: Astina\Bundle\DeadlinkBundle\Event\LoggingListener
arguments:
- @logger
- critical # log broken links as critical message
tags:
- { name: kernel.event_listener, event: astina_deadlink.broken_links, method: onBrokenLinks }
Find broken links:, (*9)
Run the astina:deadlink:check
command to check all registered link sources for broken links. If a broken link is found, the astina_deadlink.broken_links
event is dispatched., (*10)
DoctrineLinkSource
If you have are using Doctrine and have an Entity or Document that contain URLs (or text that contains URLs) you can use Astina\Bundle\DeadlinkBundle\Doctrine\DoctrineLinkSource
and configure a service like this:, (*11)
services:
my_link_source:
class: Astina\Bundle\DeadlinkBundle\Doctrine\DoctrineLinkSource
arguments:
- @doctrine
- AcmeFooBundle:MyEntity
- [ text, lead ] # properties of the given entity that contain URLs
- [] # optional: array of criteria to filter the entities
tags:
- { name: astina_deadlink.link_source }