說明:本篇學習筆記是學習http://www.chrisyue.com/symfony-in-action-day-2.html 記錄的,作者用的是symfony2.7-的版本,本篇用的是symfony3的版本。
我們已經成功初始化一個 Symfony 項目,今天我們將在此基礎上繼續添磚加瓦
在此之前,我們先明確一下我們要實現什么功能,在開始開展具體的代碼工作前先明確自己的目標是一個節省時間的好習慣。我們的需求如下:
用戶可以使用新浪微博或者 QQ 帳號登錄。
用戶可以投稿,需要填寫的內容為“標題”+“正文”
用戶可以對某篇文章進行評論
在以上的基礎上,我們繼續具體化我們的需求:
用戶的內容都將使用 markdown 格式
評論內容不可超過 140 個字
新聞內容不可超過 5000 個字
標題內容不可超過 70 個字
好,到這里我們的需求已經很明確了,雖然簡單得似乎不可能會有人用的樣子~
修改配置文件
直接修改 app/config/parameter.yml

symfony2可以點擊“configure”按鈕進行修改。
清理不需要的文件和代碼
首先需要清理的是 app/AppKernel.php 文件。在這里首先說一個 Symfony 世界里的“術語”:
什么是 Bundle
我認為 Bundle并沒有明確的定義,一般來說,如果某幾個功能,相互之間有關聯,并且相互影響,或者都屬于某一類功能,這些功能就可以捆綁在一起成為一個 Bundle。Bundle 是一個目錄,里面包含了此 Bundle 的相關代碼以及配置文件。“Bundle”本來就有“一捆”的意思。比如 Symfony 自帶演示項目 Acme,就是一個 Bundle 的例子。在 AcmeDemoBundle 里的所有代碼,都是為了演示用的,所以大家可以隨意刪除此 Bundle 而不用擔心會影響現有的項目。但為了大家的入門速度以及不把大家搞暈,這里先不多說了。
現在打開 app/AppKernel.php
symfony3沒有Acme相關的,symfony2有,請參照最上面的鏈接。
要想首頁能夠被訪問,我們得在 routing***.yml 里添加有關首頁的配置。
由于首頁是無論開發環境還是生產環境都需要訪問的,我們就把配置寫在 routing.yml 里好了,注意之前說過 routing_dev.yml 已經包含了 routing.yml 了。
我們打開 app/config/routing.yml文件,可以看到已經有如下內容:

我們打開 @AppBundle/Controller/ 里隨便什么文件,看看注解格式到底是個啥。

再訪問首頁,就出現一個寫了Homepage!!!的頁面。
這是寫在:
app/Resources/views/base.html.twig

看有一行Homepage
為了方便開發新聞模板,我們先給首頁加一個鏈接 /news
我們可以直接將 Homepage. 替換成 <a href="/news">新聞</a>。但是這樣做有一個不好的地方:如果想改路徑,比如改成 /新聞,那么每個連接到“新聞”的 href="/news" 都需要改一遍。Symfony 以及 Laravel 或者 ROR 等現代框架,幾乎都支持“雙向路由”,即在路徑和對應的控制器方法之間,再加一個路由名。此路由名可對應一個路徑,又對應一個控制器方法。前端模板里不再直接寫路徑,而是寫路由名:
` <a href="{{path('news_index')}}">新聞</a>`
以后想修改路徑,都只用改一下配置文件即可。
修改好以上代碼,再訪問首頁,又會出現以下錯誤:
An exception has been thrown during the rendering of a template ("Unable to generate a URL for the named route "news_index" as such route does not exist.").
意思是,目前還沒有一個叫 news 的路由規則。OK 我們現在來創建它:
我們把新聞相關的路徑都放在 AppBundle\Controller\NewsController 類里:
~~~
namespace AppBundle\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
class NewsController extends Controller
{
/**
* @Route("/", name="news_index")
*/
public function indexAction()
{
return $this->render('news/index.html.twig');
}
}
~~~
并且為其創建模板文件 app/Resources/views/news/index.html.twig,目前就是空文件就行。
此時再刷新首頁,錯誤消失。并且“新聞“已經可以點擊。
創建文件時需要大家注意的是,一定要確認代碼的文件的編碼格式是 UTF-8,否則會出現不可預料的字符亂碼問題。