2011-11-24 8 views
16

pregunta de siempre, ver más abajo para la versión actualizada¿Cómo hacer que Symfony2 cargue CSS, archivos JS directamente y no a través de PHP?

Mi entorno de desarrollo no es el más rápido. Tomo aproximadamente 500ms por solicitud de PHP. Está empezando a convertirse en un problema con los archivos de recursos de Symfony2 porque cada uno de los archivos de recursos se solicitan a través de los controladores internos de Symfony:

http://localhost/myproj/app_dev.php/js/bb8690a_part_4_myJavaScriptFile_2.js

Como puede verse, los archivos se cargan a través del framework Symfony y no directamente Como estoy empezando a tener más de 20 archivos para cargar, multiplicar eso con los 500 ms hace que la página cargue muy lento. Quiero cargar los archivos directamente, pero no estoy seguro de cómo hacerlo.

Esto es parte de la config.yml:

# Assetic Configuration 
assetic: 
    debug:   %kernel.debug% 
    use_controller: false 
    # java: /usr/bin/java 
    filters: 
     cssrewrite: ~ 

pensé establecer use_controller-false lo haría, pero pues no.

¿Hay alguna manera de manejar la carga de esos recursos directamente?

ACTUALIZACIÓN:

Esta es la URL que intenta utilizar ahora:

http://localhost/myproj/_controller/js/bb8690a_part_4_myJavaScriptFile_2.js

he puesto a use_controllerfalse tanto para dev y configuraciones generales. ¿Cómo me deshago de esa parte de la URL _controller?

Editar: Si puedo borrar la memoria caché, ejecute assetic:dump y tienen use_controller como false, a continuación, tras la recarga consigo Cannot load resource ".". No puedo evitar ese problema a menos que active temporalmente use_controller para cargar una página. Después de eso, lo deshabilito y vuelvo a cargar, y ahora solicita desde esa URL inválida que contiene _controller.

Parece que también funciona en prod, pero no en dev. Extraño.

código Plantilla:

{% stylesheets filter="cssrewrite" 
      'bundles/outotecofil/css/reset.css' 
      'bundles/outotecofil/css/*' 

      output='css/dist/dist.css' 
     %} 
     <link rel="stylesheet" href="{{ asset_url }}" /> 
     {% endstylesheets %} 

     {% javascripts 
      '@OutotecCommonBundle/Resources/public/js/jquery-1.6.2.min.js' 
      '@OutotecCommonBundle/Resources/public/js/jquery-ui-1.8.16.custom.min.js' 
      '@OutotecCommonBundle/Resources/public/js/chosen.jquery.min.js' 
      '@OutotecCommonBundle/Resources/public/js/widget/*' 

      '@OutotecOFILBundle/Resources/public/js/OFILDependencyManager.js' 
      '@OutotecOFILBundle/Resources/public/js/widget/*' 
      '@OutotecOFILBundle/Resources/public/js/plant-scope.js' 

      output='js/dist/dist.js' 
     %} 
     <script src="{{ asset_url }}"></script> 
     {% endjavascripts %} 

para ser extremadamente claros: sin app_dev.php (es decir, en el modo de prod), que funciona . Solo en dev no funciona y arroja este error "No se puede cargar el recurso". "" A menos que primero active use_controller para una solicitud, después de lo cual puedo inhabilitarlo y volver a cargar aunque las URL contendrán _controller/ en sus rutas.

+0

Por favor, muestre el código en su plantilla donde llama a los activos. – Sgoettschkes

+0

@Boo He actualizado la pregunta. – Tower

+0

@Tower ¿puede anotar los pasos exactos para lograr esto? – danidacar

Respuesta

20

tratar de eliminar esta parte del código en routing_dev.yml cuando use_controller es falso:

_assetic: 
    resource: . 
    type:  assetic 
6

documentación de Symfony es siempre el primer lugar por dónde empezar mirada: How to Use Assetic for Asset Management

En el entorno de producción, sus JS y CSS están representados por una única etiqueta de cada uno.En otras palabras, en lugar de ver cada archivo JavaScript que está incluida en su fuente, es probable que acaba de ver algo como esto:

<script src="/app_dev.php/js/abcd123.js"></script> 

Por otra parte, no existe realmente ese archivo, ni es dinámicamente prestados por Symfony (como los archivos de activos están en el entorno de desarrollo). Esto es a propósito: dejar que Symfony genere estos archivos dinámicamente en un entorno de producción es demasiado lento.

su lugar, cada vez que utilice su aplicación en el entorno de producción (y por lo tanto, cada vez que despliegue), se debe ejecutar la siguiente tarea:

php app/console assetic:dump --env=prod --no-debug 

Esto generará físicamente y escribir cada archivo que necesidad (por ejemplo, /js/abcd123.js). Si actualiza alguno de sus activos, deberá ejecutar esto de nuevo para regenerar el archivo.

+0

Bien, lo tengo más lejos, ahora está intentando cargar desde 'http: // localhost/myproj/_controller/js/dist/dist_jquery-1.6.2.min_1.js'. Sin el '_controller', funcionaría. ¿Por qué puso eso? – Tower

+0

Habilitar user_controller? – dlondero

+0

que user_controller? ¿Que es eso? – Tower

1

Tengo el mismo problema, configuración de trabajo es: comentario desde routing_dev.yml:

_assetic: 
resource: . 
type:  assetic 

establezca use_controller en falso. Después de hacer esto, puedo usar assetic: volcar y ver la página de trabajo.

5

Si utiliza assetic:dump, entonces usted tiene que cache:clear -e dev

" ... si ejecuta caché: claro en la memoria caché de la producción, que se calienta el caché con el modo de depuración en Si intenta volcar activos después. , cosas extrañas pueden suceder ".

lo encontré aquí: http://sftuts.com/using-assetic-in-symfony2-for-css-compression (párrafo 4)

+0

Parece que la publicación de sftuts solo habla de qué hacer en su entorno de producción y los consejos no deberían afectar lo que hace en el desarrollo. ¿Me estoy perdiendo de algo? – Sam

5

Desde el documentation

Modificar el dev config para evitar el uso del controlador.

# app/config/config_dev.yml 
assetic: 
    use_controller: false 

Retire la ruta en routing_dev.yml para evitar efectos secundarios

# app/config/routing_dev.yml 
_assetic: 
    resource: . 
    type:  assetic 

volcar automáticamente sus archivos css/menos cada vez que tenga una modificación.

php app/console assetic:dump --watch 
Cuestiones relacionadas