Tag Archives: Install

Symfony: cómo instalar un Bundle (FOSJsRoutingBundle)

Es algo que se pregunta mucha gente que empieza con Symfony: ¿cómo instalar un bundle nuevo?

En este ejemplo voy a indicar los pasos para instalar FOSJsRoutingBundle (que nos ayuda a crear rutas desde javascript). Mi instalación base de Symfony está en W:\WEB\wamp2.2\www\Symfony\

Si conoces GIT y lo usas, instalar un Bundle es tan simple como:

git submodule add git://github.com/FriendsOfSymfony/FOSJsRoutingBundle.git vendor/bundles/FOS/JsRoutingBundle

Si no conoces GIT (y no te apetece conocerlo), sigue estos pasos:

1. Descargar, descomprimir.
Lo primero es entrar a la web del bundle en cuestión y descargar el ZIP.

Después extraer la carpeta (que tendrá un nombre tal que FriendsOfSymfony-FOSJsRoutingBundle-526cf7d) en vendor/bundles/FOS y renombrarla a JsRoutingBundle.

En mi caso, queda en W:\WEB\wamp2.2\www\Symfony\vendor\bundles\FOS\JsRoutingBundle

2. Registrar el namespace en app/autoload.php (ojo, es en la parte de registerNamespaces, NO en la de registerPrefixes):

// app/autoload.php
$loader->registerNamespaces(array(
    // ...
    'FOS' => __DIR__.'/../vendor/bundles',
));

3. Registrar el bundle en app/AppKernel.php:

// app/AppKernel.php
public function registerBundles()
{
    $bundles = array(
        // ...
 
        new FOS\JsRoutingBundle\FOSJsRoutingBundle(),
    );
}

3. Registrar la ruta en app/config/routing.yml

# app/config/routing.yml
fos_js_routing:
    resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml"

4. Publicar los correspondientes assets

Si podéis crear symlinks:

php app/console assets:install --symlink web

Y si no podéis…

php app/console assets:install web

Y ya está… ¡instalado! :)

Todos los módulos se instalan de forma muy similar, asi que espero que este ejemplo os sirva.

EDIT:
Si la configuración no es correcta, os dará errores del tipo:

  The autoloader expected class "Symfony\Bundle\FOSJsRoutingBundle\DependencyInj
ection\FOSJsRoutingExtension" to be defined in file "W:\WEB\wamp2.2\www\Symfony\
app/../vendor/bundles\Symfony\Bundle\FOSJsRoutingBundle\DependencyInjection\FOSJ
sRoutingExtension.php". The file was found but the class was not in it, the clas
s name or namespace probably has a typo.

O del tipo:

W:\WEB\wamp2.2\www\Symfony>php app/console assets:install web
PHP Fatal error:  Class 'FOS\JsRoutingBundle\FOSJsRoutingBundle' not found in W:
\WEB\wamp2.2\www\Symfony\app\AppKernel.php on line 25
PHP Stack trace:
PHP   1. {main}() W:\WEB\wamp2.2\www\Symfony\app\console:0
PHP   2. Symfony\Component\Console\Application->run() W:\WEB\wamp2.2\www\Symfony
\app\console:22
PHP   3. Symfony\Bundle\FrameworkBundle\Console\Application->doRun() W:\WEB\wamp
2.2\www\Symfony\vendor\symfony\src\Symfony\Component\Console\Application.php:118
 
PHP   4. Symfony\Bundle\FrameworkBundle\Console\Application->registerCommands()
W:\WEB\wamp2.2\www\Symfony\vendor\symfony\src\Symfony\Bundle\FrameworkBundle\Con
sole\Application.php:66
PHP   5. Symfony\Component\HttpKernel\Kernel->boot() W:\WEB\wamp2.2\www\Symfony\
vendor\symfony\src\Symfony\Bundle\FrameworkBundle\Console\Application.php:80
PHP   6. Symfony\Component\HttpKernel\Kernel->initializeBundles() W:\WEB\wamp2.2
\www\Symfony\app\bootstrap.php.cache:511
PHP   7. AppKernel->registerBundles() W:\WEB\wamp2.2\www\Symfony\app\bootstrap.p
hp.cache:717
 
Fatal error: Class 'FOS\JsRoutingBundle\FOSJsRoutingBundle' not found in W:\WEB\
wamp2.2\www\Symfony\app\AppKernel.php on line 25
 
Call Stack:
    0.0003     635976   1. {main}() W:\WEB\wamp2.2\www\Symfony\app\console:0
    0.0228    2892904   2. Symfony\Component\Console\Application->run() W:\WEB\w
amp2.2\www\Symfony\app\console:22
    0.0274    3140600   3. Symfony\Bundle\FrameworkBundle\Console\Application->d
oRun() W:\WEB\wamp2.2\www\Symfony\vendor\symfony\src\Symfony\Component\Console\A
pplication.php:118
    0.0274    3140600   4. Symfony\Bundle\FrameworkBundle\Console\Application->r
egisterCommands() W:\WEB\wamp2.2\www\Symfony\vendor\symfony\src\Symfony\Bundle\F
rameworkBundle\Console\Application.php:66
    0.0274    3140600   5. Symfony\Component\HttpKernel\Kernel->boot() W:\WEB\wa
mp2.2\www\Symfony\vendor\symfony\src\Symfony\Bundle\FrameworkBundle\Console\Appl
ication.php:80
    0.0274    3140600   6. Symfony\Component\HttpKernel\Kernel->initializeBundle
s() W:\WEB\wamp2.2\www\Symfony\app\bootstrap.php.cache:511
    0.0274    3141224   7. AppKernel->registerBundles() W:\WEB\wamp2.2\www\Symfo
ny\app\bootstrap.php.cache:717

Si habéis seguido los pasos de arriba al pie de la letra, debería funcionar. No obstante, aseguraos de que el fichero Symfony\vendor\bundles\FOS\JsRoutingBundle existe y contiene

namespace FOS\JsRoutingBundle;
 
use Symfony\Component\HttpKernel\Bundle\Bundle;
 
/**
 * FOSJsRoutingBundle class.
 *
 * @author      William DURAND <william.durand1@gmail.com>
 */
class FOSJsRoutingBundle extends Bundle
{
}