Symfony 以及它的所有的包都是由 Composer 所完美管理的。Bower 是前端依賴性管理的附屬工具,就像 Bootstrap 或者 jQuery。由于 Symfony 是一個(gè)純的后端框架,因此它不能使用 Bower 來幫助你。幸運(yùn)的是,它很好用!
Bower 位于 Node.js 的頂層。確保你安裝了它然后運(yùn)行下列代碼:
$ npm install -g bower
在完成這個(gè)命令之后,在你終端運(yùn)行 bower 來檢查它是否正確安裝了。
如果你的電腦上沒有安裝 NodeJS,你也可以使用 BowerPHP(一個(gè)非官方的 Bower 的 PHP 接口)。注意這個(gè)依然運(yùn)行在阿爾法狀態(tài)下。如果你使用 BowerPHP,那么就用 BowerPHP 代替例子中的 bower。
正常情況下,Bower 將所有東西下載到 bower_components/ 命令中。在 Symfony 中,只有在 web/ 目錄下的文件才是可以公開訪問的,因此作為替代你需要在那配置 Bower 來下載東西。為了完成這個(gè),你需要?jiǎng)?chuàng)建一個(gè)具有新的目的地(例如 web/assets/vendor)的 .bowerrc 文件:
{
"directory": "web/assets/vendor/"
}
如果你在使用基于前端的系統(tǒng)例如 Gulp 或者 Grunt,那么你就可以隨意按照你想的來配置目錄。典型地,你最終將使用這些工具來將你的所有資產(chǎn)移動(dòng)到 web/ 目錄。
信不信由你,但是現(xiàn)在你已經(jīng)準(zhǔn)備好在你的 Symfony 應(yīng)用程序中使用 Bower 了。作為一個(gè)例子,你將在你的工程中安裝 Bootstrap 并且在你的布局中包含它。
只要運(yùn)行 bower init 就能創(chuàng)建 bower.json 文件。現(xiàn)在你已經(jīng)準(zhǔn)備開始向你的工程中添加?xùn)|西了。舉例來說,向你的 Bootstrap 中添加 bower.json 并且下載它,只要運(yùn)行下列代碼就好:
$ bower install --save bootstrap
這個(gè)將會(huì)在 web/assets/vendor/ 中(或者你在 .bowerrc 中設(shè)置的其他路徑)安裝 Bootstrap 以及它的依賴性。
獲取更多如何使用 Bower 的信息,請(qǐng)查閱 Bower 文檔。
既然已經(jīng)安裝了依賴性,你可以像正常的 CSS/JS 一樣在你的模板中包含 bootstrap:
Twig:
{# app/Resources/views/layout.html.twig #}
<!doctype html>
<html>
<head>
{# ... #}
<link rel="stylesheet"
href="{{ asset('assets/vendor/bootstrap/dist/css/bootstrap.min.css') }}">
</head>
{# ... #}
</html>
PHP:
<!-- app/Resources/views/layout.html.php -->
<!doctype html>
<html>
<head>
{# ... #}
<link rel="stylesheet" href="<?php echo $view['assets']->getUrl(
'assets/vendor/bootstrap/dist/css/bootstrap.min.css'
) ?>">
</head>
{# ... #}
</html>
好樣的!你的站點(diǎn)現(xiàn)在正在使用 Bootstrap。你現(xiàn)在可以輕松地將 bootstrap 升級(jí)到最新版本并且也可以管理其他的前端依賴性。
目前,你應(yīng)當(dāng)提交由 Bower 下載的注冊(cè)而不是向你的 .gitignore 文件添加目錄(例如 web/assets/vendor):
$ git add web/assets/vendor
為什么呢?不像 Composer,Bower 目前沒有“鎖定”特征,這就意味著在不同的服務(wù)器上運(yùn)行 bower install 將會(huì)給你額外的你在其它機(jī)器上的資產(chǎn)這沒有保障。更多細(xì)節(jié),詳見檢查前端的依賴性這篇文章。
但是,在將來 Bower 很可能添加鎖定特征(例如 bower/bower#1748)。