Ok, así que no tengo una solución completa, pero un poco más de dónde buscar una :)
Puede especificar cargadores (servicios) para el punto de plantillas en app/config/config.yml
framework:
esi: { enabled: true }
#translator: { fallback: %locale% }
secret: %secret%
router:
resource: "%kernel.root_dir%/config/routing.yml"
strict_requirements: %kernel.debug%
form: true
csrf_protection: true
validation: { enable_annotations: true }
templating:
engines:
- twig
loaders: [moby.loader]
default_locale: %locale%
trust_proxy_headers: false
session: ~
A continuación, defina el servicio del cargador mencionado:
services:
moby.loader:
class: Acme\AppBundle\Twig\Loader\MobyFilesystemLoader
arguments: ["@templating.locator", "@service_container"]
Después de eso definir su servicio de cargador de clases:
namespace Acme\AppBundle\Twig\Loader;
use Symfony\Bundle\FrameworkBundle\Templating\Loader\FilesystemLoader;
use Symfony\Component\Templating\Storage\FileStorage;
class MobyFilesystemLoader extends FilesystemLoader
{
protected $container;
public function __construct($templatePathPatterns, $container)
{
parent::__construct($templatePathPatterns);
$this->container = $container;
}
public function load(\Symfony\Component\Templating\TemplateReferenceInterface $template)
{
// Here you can filter what you actually want to change from html
// to mob format
// ->get('controller') returns the name of a controller
// ->get('name') returns the name of the template
if($template->get('bundle') == 'AcmeAppBundle')
{
$request = $this->container->get('request');
$format = $this->isMobile($request) ? 'mob' : 'html';
$template->set('format', $format);
}
try {
$file = $this->locator->locate($template);
} catch (\InvalidArgumentException $e) {
return false;
}
return new FileStorage($file);
}
/**
* Implement your check to see if request is made from mobile platform
*/
private function isMobile($request)
{
return true;
}
}
Como puede ver, esta no es la solución completa, pero espero que esto, al menos, lo guíe en la dirección correcta.
EDIT: acabo de enterar que hay un paquete con capacidades de detección de móviles, con el motor ramita personalizado que hace que el archivo de plantilla en función de un dispositivo que envía la solicitud ZenstruckMobileBundle, aunque nunca he usado así que ... :)
No estoy seguro de que la solución esté relacionada con el marco. ¿Ha realizado la compra http://www.hand-interactive.com/resources/detect-mobile-php.htm#download? – FMaz008