Symfony2-Assetic-ładowanie obrazów w CSS

Mam CoreBundle, który zawiera główne pliki css i obrazy. Teraz mam problem podczas ładowania obrazu z css; obraz nie jest wyświetlany.

 background-image:url(../images/file.png)

(z pełną ścieżką działa)

Zainstalowałem zasoby za pomocą polecenia: assets:install web i mogę zobaczyć pliki graficzne i css pod web/bundles/cmtcore/(css|images).

Oto struktura plików wewnątrz pakietu core:

/CoreBundle
    /Resources
        /public
            /css
                /main.css
            /images
                /file.png

A oto jak Ładuję plik css do szablonu:

 {% stylesheets '@CmtCoreBundle/Resources/public/css/*' %}
        <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
 {% endstylesheets %}
Z góry dziękuję za pomoc.
Author: ihsan, 2011-08-12

9 answers

Użyj filtra cssrewrite z pakietu Assetic

W config.yml:

assetic:
    debug:          %kernel.debug%
    use_controller: false
    filters:
        cssrewrite: ~

A następnie wywołaj swoje arkusze stylów tak:

 {% stylesheets 'bundles/cmtcore/css/*' filter='cssrewrite' %}
        <link rel="stylesheet" type="text/css" media="screen" href="{{ asset_url }}" />
 {% endstylesheets %}

Oh i nie zapomnij użyć php app/console assetic:dump

 54
Author: Inoryy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-28 11:44:38

Było kilka problemów z ccsrewrite:

Filtr CssRewrite nie działa, gdy używa składni @ MyBundle w AsseticBundle do odwoływania się do zasobów. Jest to znane ograniczenie.

Oto wersja php dla cssrewrite:

<?php 
    foreach ($view['assetic']->stylesheets(array(
        'bundles/test/css/foundation/foundation.css',
        'bundles/test/css/foundation/app.css',
        'bundles/test/css/themes/adapzonManager.css'), array('cssrewrite')) as $url):
?>
    <link rel="stylesheet" href="<?php echo $view->escape($url) ?>" />
<?php endforeach; ?>
 17
Author: user257980,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-11 09:58:00

Rozwiązałem problem, postępując zgodnie z instrukcjami na tej stronie: http://www.craftitonline.com/2011/06/symfony2-beautify-with-assetic-and-a-template-part-ii/

Rzeczywisty problem polega na tym, że odwołujesz się do zasobów pakietu bezwzględnie, ale musisz odwoływać się do nich względnie.

{% stylesheets filter='cssrewrite' output='css/*.css'
    'bundles/blistercarerisikobewertung/css/*'  %}
    <link href="{{ asset_url }}" type="text/css" rel="stylesheet" />
{% endstylesheets %}

Wyczyść pamięć podręczną i zainstaluj ponownie zasoby

 13
Author: Yann,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-21 15:29:07

Jeśli chodzi o odpowiedź Yanna, w rzeczywistości nie musisz ponownie instalować zasobów po każdej zmianie, jeśli używasz opcji --symlink.

Zauważ jednak, że uruchomienie skryptu instalacyjnego dostawców nadpisze dowiązania symboliczne, więc musisz usunąć foldery bundles/* i zainstalować zasoby ponownie za pomocą opcji --symlink po uruchomieniu skryptu dostawców.

 6
Author: tystr,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-19 23:28:35

Opracowałem mały pakiet z dodatkowym filtrem, aby rozwiązać ten problem. Możesz go znaleźć na GitHubie: https://github.com/fkrauthan/FkrCssURLRewriteBundle.git

Z tym pakietem notacja @dla assetic działa, jeśli masz ścieżki relativ w pliku css.

 6
Author: fkrauthan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-16 18:26:43

Rozwiązałem to używając htaccess:

Moje zasoby są przechowywane w src / Datacode/BudgetBundle/Resources/public|(css|img/js), a parametr wyjściowy assetic jest ustawiony na: bundles/datacodebudget/css / styles.css (w katalogu www)

W moim css używam ścieżki względnej ../ align = "left" /

Oto .reguła htaccess:

# Make image path work on dev
# i.e. /app_dev.php/bundles/datacodebudget/img/glyphicons-halflings-white.png rewrites to /bundles/datacodebudget/img/glyphicons-halflings-white.png
RewriteRule ^app_dev\.php/(.*)/(.*)/img/(.*)$ /$1/$2/img/$3 [L]

Mój css jest ładowany w następujący sposób:

{% stylesheets
    '@DatacodeBudgetBundle/Resources/public/css/bootstrap.css'
    '@DatacodeBudgetBundle/Resources/public/css/bootstrap-responsive.css'
    '@DatacodeBudgetBundle/Resources/public/css/styles.css' 
    '@DatacodeBudgetBundle/Resources/public/css/chosen.css' output="bundles/datacodebudget/css/styles.css"
%}
<link href="{{ asset_url }}" rel="stylesheet" type="text/css" />
{% endstylesheets %}

W moim config.plik yml, który mam:

assetic:
    use_controller: true

Które (bez htaccess rewrite) powoduje, że obrazy nie są ładowane, ponieważ ścieżka względna dla obrazu znajduje się w app_dev.php / bundles/datacodebudget/img / someimage..jpg Użycie filtra cssrewrite również nie działa, ponieważ następnie przepisuje ../ img do./../../../ Resources / public/ img/which resolves to Resources/public / img.

Za pomocą metody htaccess obrazy ładują się dobrze i muszę tylko uruchomić assetic: dump / assets: install, gdy dodaję nowe obrazy lub chcę wypchnąć zmiany do produkcji.

 1
Author: Matt Davis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-17 18:34:16

Rozwiązałem ten problem trwale tworząc folder 'images' z obrazkami w folderze ' symfony_root / web/'. Result: 'symfony_root / web / images /' - I staje się świetna praca!

 1
Author: yura,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-19 15:51:08

Mam podobny problem, rozglądałem się co najmniej od dnia i nie jestem przekonany, czy istnieje dobre praktyczne rozwiązanie tego problemu. Polecam używanie Assetic do obsługi javascript i css, a następnie po prostu umieszczanie obrazów w katalogu docroot swojej strony internetowej. Na przykład, jeśli Masz plik css, który się odwołuje ../ images / file.png, po prostu utwórz folder i obrazy pod swoim docroot i umieść plik.png tam. To zdecydowanie nie jest najlepsze rozwiązanie teoretyczne, ale jedyne To naprawdę działa.

 0
Author: adavea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-27 22:47:28

I "rozwiązałem" to ładując plik css Inaczej:

<link rel="stylesheet" href="{{ asset('bundles/cmtcore/css/main.css') }}" type="text/css" media="all" />

Tak to się robi w Acme / DemoBundle.

Zostawię to pytanie nierozwiązane, bo wydaje się to głupie.
 -1
Author: LBridge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-07 19:51:54