php - Symfony 3.4 Usar vista dentro de mi paquete
symfony-3.4 (1)
El problema básico parece ser que en S3.4, las rutas de plantilla de ramita como ''ListerListerBundle: Predeterminado: index.html.twig'' ya no son compatibles.
Reemplace la ruta en el controlador con:
''@ListerLister/Default/index.html.twig''
Y todo debería estar bien. Si alguna vez no está seguro de cuál es el prefijo real del espacio de nombres, ejecute:
bin/console debug:twig
para enumerarlos.
S3.3 todavía funciona bien, así que esto es algo que cambió en 3.4. Se supone que está utilizando el formato de espacio de nombres de todos modos, así que esto no es un gran problema.
Archivé un problema sobre esto en github: https://github.com/sensiolabs/SensioGeneratorBundle/issues/587
Veremos lo que los mantenedores tienen que decir.
Actualización: el gran y poderoso Fabpot mismo respondió a mi problema. Si desea seguir usando el formato ''ListerListerBundle: Predeterminado: index.html.twig'' para plantillas, edite su archivo app / config / config.yml:
# app/config/config.yml
framework:
templating:
engines: [''twig'']
Solo debe hacer esto si tiene un código heredado que todavía usa el formato anterior. Use espacios de nombres de ramitas para todos los códigos nuevos.
Tengo algunos problemas para la configuración de un nuevo repositorio usando Symfony 3.4. He usado el comando symfony para crearlo con el último LTS (3.4) y también agrego un nuevo paquete usando el comando. Mi nuevo paquete está funcionando y funciona bien, pero no puedo usar la vista almacenada dentro de este paquete.
Te muestro la estructura de mi paquete:
Quiero usar este index.html.twig en mi controlador de esta manera:
<?php
namespace Lister/ListerBundle/Controller;
use Symfony/Bundle/FrameworkBundle/Controller/Controller;
use Sensio/Bundle/FrameworkExtraBundle/Configuration/Route;
class DefaultController extends Controller
{
/**
* @Route("/lister")
*/
public function indexAction()
{
return $this->render(''ListerListerBundle:Default:index.html.twig'');
}
}
Pero cuando intento renderizarlo tengo este error.
No se puede encontrar la plantilla "ListerListerBundle: Predeterminado: index.html.twig" (examinado: / home / emendiel / Data / Code / Perso / WebLister / app / Resources / views, / home / emendiel / Data / Code / Perso / WebLister / vendor / symfony / symfony / src / Symfony / Bridge / Twig / Resources / views / Form).
Entiendo lo que dice, mi carpeta no es donde Symfony busca en mi vista, pero no encuentro cómo puedo decirle a Symfony que vaya en "ListerBundle / Ressources / views"
En mi proyecto más antiguo que era trabajar sin otra configuración.
Información: uso mi paquete como paquete reutilizable.
Saludos,
PD: Esta es mi parte de carga automática en composer.json
"autoload": {
"psr-4": {
"": "src/"
},
"classmap": [
"app/AppKernel.php",
"app/AppCache.php"
]
},
PSS: Mi AppKernel:
public function registerBundles()
{
$bundles = [
new Symfony/Bundle/FrameworkBundle/FrameworkBundle(),
new Symfony/Bundle/SecurityBundle/SecurityBundle(),
new Symfony/Bundle/TwigBundle/TwigBundle(),
new Symfony/Bundle/MonologBundle/MonologBundle(),
new Symfony/Bundle/SwiftmailerBundle/SwiftmailerBundle(),
new Doctrine/Bundle/DoctrineBundle/DoctrineBundle(),
new Sensio/Bundle/FrameworkExtraBundle/SensioFrameworkExtraBundle(),
new AppBundle/AppBundle(),
new Lister/ListerBundle/ListerListerBundle(),
];
...
Y de nuevo: aquí mi inyección de dependencia
Y el contenido de los archivos:
Configuration.php
<?php
namespace Lister/ListerBundle/DependencyInjection;
use Symfony/Component/Config/Definition/Builder/TreeBuilder;
use Symfony/Component/Config/Definition/ConfigurationInterface;
/**
* This is the class that validates and merges configuration from your app/config files.
*
* To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/configuration.html}
*/
class Configuration implements ConfigurationInterface
{
/**
* {@inheritdoc}
*/
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root(''lister_lister'');
// Here you should define the parameters that are allowed to
// configure your bundle. See the documentation linked above for
// more information on that topic.
return $treeBuilder;
}
}
ListerListerExtension.php
<?php
namespace Lister/ListerBundle/DependencyInjection;
use Symfony/Component/DependencyInjection/ContainerBuilder;
use Symfony/Component/Config/FileLocator;
use Symfony/Component/HttpKernel/DependencyInjection/Extension;
use Symfony/Component/DependencyInjection/Loader;
/**
* This is the class that loads and manages your bundle configuration.
*
* @link http://symfony.com/doc/current/cookbook/bundles/extension.html
*/
class ListerListerExtension extends Extension
{
/**
* {@inheritdoc}
*/
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);
$loader = new Loader/YamlFileLoader($container, new FileLocator(__DIR__.''/../Resources/config''));
$loader->load(''services.yml'');
}
}
Solución: de @Cerad
@ ListerLister / Default / index.html.twig
Respuesta original de @Cerad
Por alguna razón, a S3.4 ya no le gusta el enfoque Bundle: Dir: name para especificar rutas de ramitas y el comando generate: bundle aún no se ha actualizado. No estoy seguro si es un error o una característica. La ruta @ ListerLister / Default / index.html.twig sugerida anteriormente debería funcionar. Pruebe bin / console debug: twig para ver las rutas de los espacios de nombres de su rama. - Cerad