亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > PHP > 正文

Symfony學習十分鐘入門經典教程

2024-05-04 23:42:44
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了Symfony學習十分鐘入門教程,詳細介紹了Symfony的安裝配置,項目初始化,建立Bundle,設計實體,添加約束,增刪改查等基本操作技巧,需要的朋友可以參考下
 

Symfony是一個強大的基于PHP的Web開發框架,在這里我們用十分鐘的時間來做一個簡單的增刪改查的程序, 任何不熟悉Symfony的人都可以通過這個教程完成自己的第一個Symfony程序。

如果需要這個樣例程序的全部源代碼,可以訪問 這里 ,或者通過下面的方式獲取源代碼:

$git clone https://github.com/saharabear/symfony-sample.git

項目初始化

首先,需要你在自己的電腦中安裝PHP環境并安裝git.這方面的內容屬于基礎內容,網絡上有大量的教程,在這里就不多介紹了,不過要提示的一點是:PHP從5.4開始, 已經內置了測試用服務器,Symfony也擁抱了這個由PHP內置的服務器,只需要在命令行中使用$php app/console server:run 就可以 啟動基于Symfony框架的PHP程序進行測試,因此不必要使用XAMPP這一類復雜的集成環境,直接安裝PHP并保證在命令行下可以執行php命令就可以了。

然后,我們需要建立一個新的目錄,名字叫symfony-sample,Symfony使用一個叫composer的程序管理各種類庫的依賴關系,因此如果你的機器上 安裝了composer,就可以直接跳過這一步,如果沒有安裝,可以用下面的命令安裝最新版本的composer.

$cd symfony-sample$curl -sS https://getcomposer.org/installer | php

如果希望了解更多關于composer的信息,可以參考這個網站。

安裝完成composer后,我們可以開始安裝當前最新版本的Symfony2.6.0

復制代碼代碼如下:
$php composer.phar create-project symfony/framework-standard-edition mysampleproject/ 2.6.0

 

安裝過程中,需要填寫數據庫等信息,在這個例子中,我們會使用mysql數據庫,因此你可以一路按回車鍵,先不要關心這一切配置應該如何填寫。反正 Symfony會在安裝成功后,生成一個配置文件,叫app/config/parameters.yml,下面我會提供一個parameters.yml文件的 內容樣本,只要復制進去就可以了,先不必關注這么多細節。

剛才創建mysampleproject以后,在symfony-sample目錄下生成了mysampleproject目錄,我習慣于將程序放在項目的根目錄下,因此執行下面的幾個命令, 就可以把項目從symfony-sample/mysampleproject目錄中,移到symfony-sample目錄中

$mv mysampleproject/* ./$rm -rf mysampleproject

理論上來講,我們已經完成了Symfony項目的創建,不過剛才提到的parameters.yml文件還沒有解釋。這個parameters.yml是Symfony的全局配置文件, 無論是數據庫配置信息還是其他的各種配置,都可以放在這個文件中。下面是我們需要使用的測試用的parameters.yml,記得把最后一行的值修改為一個隨機值

# This file is auto-generated during the composer installparameters:  database_driver: pdo_mysql  database_host: localhost  database_port: 3306  database_name: symfony  database_user: root  database_password: root  mailer_transport: smtp  mailer_host: localhost  mailer_user: null  mailer_password: null  locale: en  secret: ChangeThisLineAsYouWish_ioiuqwoieru

直接用這段,替換掉app/config/parameters.yml文件中的內容,然后編輯app/config/config.yml,找到下面幾行,把最后一行添加進去并保存。

driver:  "%database_driver%"host:   "%database_host%"port:   "%database_port%"dbname:  "%database_name%"user:   "%database_user%"password: "%database_password%"charset: UTF8path:   "%database_path%"

好了,這樣我們就完成了基本的Symfony程序的配置,你現在有了一個配置好了數據庫,郵件發送器,日志系統的基本程序原型。下面,我們就開始編寫自己的Symfony程序。

建立Bundle

先說一下什么是Bundle。Symfony是以DI為核心的,可能你不知道什么是DI,沒關系,這不重要,你可以把Symfony的DI理解成為一個功能池,把程序中的所有功能都做成Bundle,或者你把Bundle理解成一組php文件組合而成的程序就可以。 比如用戶注冊,登錄功能做成一個Bundle,你也可以把一個論壇的發帖回貼功能做成一個Bundle,自然也可以把文章管理做成一個Bundle,然后用一個Bundle去調用和配置不同的Bundle,那么你就可以把網站組裝起來了,而你寫的各種Bundle,在其他的應用程序中還可以繼續復用,這樣寫的Bundle越多,可復用性就越強,制作新項目的時候也越有利。

我們現在就來建立自己的Bundle.在命令行中,使用命令:

$php app/console generate:bundleBundle namespace: Symfony/Bundle/SampleBundleBundle name [SymfonySampleBundle]:Target directory [/home/saharabear/workspace/symfony-sample/src]:Configuration format (yml, xml, php, or annotation): ymlDo you want to generate the whole directory structure [no]? yesDo you confirm generation [yes]? yesGenerating the bundle code: OKChecking that the bundle is autoloaded: OKConfirm automatic update of your Kernel [yes]? yesEnabling the bundle inside the Kernel: OKConfirm automatic update of the Routing [yes]? yes

這樣就成功建立了我們的Bundle,名字叫SymfonySampleBundle,我們使用的Bundle namespace是Symfony/Bundle/SampleBundle,這是一種約定,我們還可以建立其他的Bundle,比如Symfony/Bundle/PostBundle, 或者Symfony/Bundle/ArticleBundle,而對應的Bundle name就分別是SymfonyPostBundle或者SymfonyArticleBundle。你也可以自己建立這幾個Bundle,這并不會影響當前我們的教程。

對了,在我們建立的Bundle中,分別會生成下面幾個目錄:

① Entity:這個目錄并不是必須的,很多情況下只有在生成實體的時候才會生成,放置模型,也就是MVC中的M
② Controller:這個目錄會生成DefaultController.php,你可以在這里建立自己的Controller控制器,也就是MVC中的C
③ Resources:這個目錄下面還有子目錄,其中views放置的是模板,也就是MVC中的V,而public放置的是靜態文件,比如js, css, images等等
④ Tests:放置單元測試與集成測試的代碼,在這個樣例程序中暫時不需要
⑤ DependencyInjection:與DI相關的目錄,暫時也不需要去了解
⑥ SymfonySampleBundle.php:當前這個Bundle的定義文件

更多細節可以去閱讀Symfony 的官方文檔,而當前的重點是把這個Symfony的樣例程序運行起來。

設計實體

在MVC的設計理念中,M是最重要的,因為M表達的內容是業務邏輯。我覺得如果這個地方往深入去探討,會一直探討到富血模型或者貧血模型,不過目前在這個教程中根本 不需要考慮這么多,你只需要知道實體就是MVC中的M,用于表達業務邏輯。比如說,我們要開發一個文章管理的系統,那么文章本身就代表的業務邏輯。比如,我們的文章要有 標題,內容,作者,那么這三項就屬于業務邏輯,而標題不能夠為空,不能超過200長度,內容不能為空,作者卻是可以為空的,這些也屬于業務邏輯。同時,這個文章需要被 存儲起來,比如存儲到數據庫中,那么這個M就應該能夠映射到數據庫的表中。我們把這個M,叫實體。

還是少說廢話,直接上代碼。那么如何建立實體呢?當然不是從頭一點一點地寫,而是直接用下面的命令生成:

$php app/console generate:doctrine:entityWelcome to the Doctrine2 entity generatorThis command helps you generate Doctrine2 entities.First, you need to give the entity name you want to generate.You must use the shortcut notation like AcmeBlogBundle:Post.The Entity shortcut name: SymfonySampleBundle:ArticleDetermine the format to use for the mapping information.Configuration format (yml, xml, php, or annotation) [annotation]:ymlInstead of starting with a blank entity, you can add some fields now.Note that the primary key will be added automatically (named id).Available types: array, simple_array, json_array, object,boolean, integer, smallint, bigint, string, text, datetime, datetimetz,date, time, decimal, float, blob, guid.New field name (press to stop adding fields): titleField type [string]:Field length [255]: 200New field name (press to stop adding fields): contentField type [string]: textNew field name (press to stop adding fields): authorField type [string]:Field length [255]: 20New field name (press to stop adding fields):Do you want to generate an empty repository class [no]? yesSummary before generationYou are going to generate a "SymfonySampleBundle:Article" Doctrine2 entityusing the "yml" format.Do you confirm generation [yes]? yesEntity generationGenerating the entity code: OKYou can now start using the generated code!

經過這些命令,你會發現在Entity中建立了新的文件Article.php,代碼如下:

namespace Symfony/Bundle/SampleBundle/Entity;use Doctrine/ORM/Mapping as ORM;/** * Article * * @ORM/Table() * @ORM/Entity(repositoryClass="Symfony/Bundle/SampleBundle/Entity/ArticleRepository") */class Article{  /**   * @var integer   *   * @ORM/Column(name="id", type="integer")   * @ORM/Id   * @ORM/GeneratedValue(strategy="AUTO")   */  private $id;  /**   * @var string   *   * @ORM/Column(name="title", type="string", length=200)   */  private $title;  /**   * @var string   *   * @ORM/Column(name="content", type="text")   */  private $content;  /**   * @var string   *   * @ORM/Column(name="author", type="string", length=20)   */  private $author;  /**   * Get id   *   * @return integer   */  public function getId()  {    return $this->id;  }  /**   * Set title   *   * @param string $title   * @return Article   */  public function setTitle($title)  {    $this->title = $title;    return $this;  }  /**   * Get title   *   * @return string   */  public function getTitle()  {    return $this->title;  }  /**   * Set content   *   * @param string $content   * @return Article   */  public function setContent($content)  {    $this->content = $content;    return $this;  }  /**   * Get content   *   * @return string   */  public function getContent()  {    return $this->content;  }  /**   * Set author   *   * @param string $author   * @return Article   */  public function setAuthor($author)  {    $this->author = $author;    return $this;  }  /**   * Get author   *   * @return string   */  public function getAuthor()  {    return $this->author;  }}

你可以一行不改地使用這些代碼。這時候我們再來做幾個神奇的操作:

復制代碼代碼如下:
$php app/console doctrine:schema:update --force

 

這個操作,已經幫助你通過Article.php建立了數據庫和數據表,你不需要自己操作這個過程,下面我們還會對Article.php進行改造,而到時候只需要重新 執行上面的這個操作,Symfony會幫助你自動修改數據庫的表結構。

添加約束

上面我們創建了Article.php,既然這個實體代表了具體的業務邏輯,因此我們要考慮幾個現實的問題:

1. 用戶必須填寫標題和內容
2. 用戶填寫的標題不能超過200個字
3. 用戶可以不填寫作者

這些就屬于業務邏輯,而我們可以修改Article.php如下,以增加相應的業務邏輯的約束:

namespace Symfony/Bundle/SampleBundle/Entity;use Doctrine/ORM/Mapping as ORM;use Symfony/Component/Validator/Constraints as Assert;/** * Article * * @ORM/Table() * @ORM/Entity(repositoryClass="Symfony/Bundle/SampleBundle/Entity/ArticleRepository") */class Article{  /**   * @var integer   *   * @ORM/Column(name="id", type="integer")   * @ORM/Id   * @ORM/GeneratedValue(strategy="AUTO")   */  private $id;  /**   * @var string   * @Assert/NotBlank(message="標題不可為空")   * @Assert/Length(   *   max=200,   *   maxMessage="標題不能超過200個字"   * )   * @ORM/Column(name="title", type="string", length=200)   */  private $title;  /**   * @var string   *   * @Assert/NotBlank(message="文章內容不可為空")   * @ORM/Column(name="content", type="text")   */  private $content;  /**   * @var string   *   * @ORM/Column(name="author", type="string", length=20,nullable=true)   */  private $author;  /**   * Get id   *   * @return integer   */  public function getId()  {    return $this->id;  }  /**   * Set title   *   * @param string $title   * @return Article   */  public function setTitle($title)  {    $this->title = $title;    return $this;  }  /**   * Get title   *   * @return string   */  public function getTitle()  {    return $this->title;  }  /**   * Set content   *   * @param string $content   * @return Article   */  public function setContent($content)  {    $this->content = $content;    return $this;  }  /**   * Get content   *   * @return string   */  public function getContent()  {    return $this->content;  }  /**   * Set author   *   * @param string $author   * @return Article   */  public function setAuthor($author)  {    $this->author = $author;    return $this;  }  /**   * Get author   *   * @return string   */  public function getAuthor()  {    return $this->author;  }}

然后執行同步數據庫的操作:

$ php app/console doctrine:schema:update --forceUpdating database schema...Database schema updated successfully! "1" queries were executed

增刪改查

好了,我們來做一個針對文章的增刪改查操作。首先請執行下面的命令:

$ php app/console generate:doctrine:crud Welcome to the Doctrine2 CRUD generatorThis command helps you generate CRUD controllers and templates.First, you need to give the entity for which you want to generate a CRUD.You can give an entity that does not exist yet and the wizard will helpyou defining it.You must use the shortcut notation like AcmeBlogBundle:Post.The Entity shortcut name: SymfonySampleBundle:ArticleBy default, the generator creates two actions: list and show.You can also ask it to generate "write" actions: new, update, and delete.Do you want to generate the "write" actions [no]? yesDetermine the format to use for the generated CRUD.Configuration format (yml, xml, php, or annotation) [annotation]: ymlDetermine the routes prefix (all the routes will be "mounted" under thisprefix: /prefix/, /prefix/new, ...).Routes prefix [/article]: /article Summary before generationYou are going to generate a CRUD controller for "SymfonySampleBundle:Article"using the "yml" format.Do you confirm generation [yes]? yes CRUD generationGenerating the CRUD code: OKGenerating the Form code: OK You can now start using the generated code!

然后請編輯DefaultController.php中的indexAction如下:

/** * @Route("/",name="welcome") * @Template() */public function indexAction(){  return array();}

編輯Resource/views/Default/index.html.twig內容如下:

<a href="{{path('article')}}">文章管理</a>

讓我們看看神奇的事情,啟動內置的測試服務器:

$php app/console server:run

好了,我們已經完成了這十分鐘的博客,一切的代碼都在Controller/ArticleController.php,Form/ArticleType.php,Resource/views/Article/*.html.twig中,我們已經完成了最基本的文章管理功能。當然在你熟悉Symfony以后,未必需要完全依靠Symfony幫你生成這些增刪改查操作,可是起碼Symfony用一個命令讓一切都先運行起來了,這不就是我們所要的原型嗎?

本文永久地址:http://blog.it985.com/5133.html
本文出自 IT985博客 ,轉載時請注明出處及相應鏈接。

希望本文所述對大家基于Symfony框架的PHP程序設計有所幫助。



注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97视频在线观看成人| 欧美野外猛男的大粗鳮| 国产第一区电影| 91网站在线看| 亚洲人成77777在线观看网| 国产一区二区三区18| 亚洲影视九九影院在线观看| 91系列在线观看| 91视频国产高清| 国产精品亚洲片夜色在线| 91精品国产高清久久久久久久久| 欧美激情精品久久久久久黑人| 一区二区av在线| 成人春色激情网| 91影视免费在线观看| 中文字幕亚洲一区二区三区| 亚洲国产精品yw在线观看| 国产精品视频男人的天堂| 九九热这里只有精品6| 亚洲r级在线观看| 国产精品嫩草影院久久久| 欧美成人免费在线观看| 欧美xxxx14xxxxx性爽| 岛国视频午夜一区免费在线观看| 97在线视频免费观看| 欧美日韩性生活视频| 成人免费午夜电影| 91精品久久久久久久久| 欧美成人精品激情在线观看| 伊人成人开心激情综合网| 久久97久久97精品免视看| 在线观看国产欧美| 欧美高跟鞋交xxxxhd| 亚洲最新av在线| 日韩中文字幕在线视频| 国模精品视频一区二区| 欧美成人小视频| 在线观看欧美日韩国产| 欧美日韩一区免费| 亚洲淫片在线视频| 亚洲一区制服诱惑| 久久久影视精品| 影音先锋欧美精品| 77777少妇光屁股久久一区| 精品中文字幕久久久久久| 精品国产乱码久久久久久婷婷| 久久99精品国产99久久6尤物| 久久精品在线播放| 欧美性猛交xxxx免费看久久久| 亚洲欧美精品一区二区| 77777少妇光屁股久久一区| 国产精品丝袜一区二区三区| 欧美激情综合亚洲一二区| 一区二区欧美日韩视频| 久久久久久高潮国产精品视| 91av中文字幕| 91国产精品91| 日韩av在线高清| 欧美性xxxx在线播放| 中文字幕久久亚洲| 亚洲男人的天堂网站| 欧美成人精品一区| 一区二区成人精品| 久久久久久网址| 色综合久久久888| 国产综合在线观看视频| 7777精品久久久久久| 国产精品色视频| 亚洲国产一区二区三区四区| 亚洲人成电影网站色…| 日韩乱码在线视频| 亚洲欧洲日产国产网站| 日本精品一区二区三区在线| 亚洲综合大片69999| 国产欧美 在线欧美| 欧美午夜女人视频在线| 国内精品国产三级国产在线专| 久久久久亚洲精品成人网小说| 国产精品视频中文字幕91| 国产精品老女人精品视频| 亚洲成色999久久网站| 自拍视频国产精品| 久久免费在线观看| 日本精品视频在线播放| 日韩大陆毛片av| 精品久久久精品| 亚洲天堂一区二区三区| 久久久精品国产一区二区| 欧美日韩国产综合新一区| 国产精品欧美日韩一区二区| 欧美猛少妇色xxxxx| 欧美在线视频网站| 国产亚洲aⅴaaaaaa毛片| 成人两性免费视频| 亚洲精品自拍偷拍| 日韩国产精品视频| 欧美孕妇与黑人孕交| 国产亚洲精品久久久久动| 亚洲欧美在线x视频| 国产视频丨精品|在线观看| 国内精品久久久久久久| 亚洲丝袜一区在线| 亚洲大胆美女视频| 国产精品久久久久久搜索| 亚洲欧洲午夜一线一品| 51精品在线观看| 午夜精品免费视频| 国产成人精品视频| 久久精品国产2020观看福利| 欧美激情视频给我| 亚洲美女在线视频| 久久天天躁夜夜躁狠狠躁2022| 久久人人爽人人爽人人片亚洲| 久久艳片www.17c.com| 欧美一级高清免费| 欧美日本在线视频中文字字幕| 欧美最顶级丰满的aⅴ艳星| 亚洲综合在线播放| 色狠狠久久aa北条麻妃| 国产精品免费视频久久久| 国产在线拍偷自揄拍精品| 91久久久久久久久久久| 欧美精品免费在线观看| 欧美又大又粗又长| 欧美日韩另类字幕中文| 亚洲国产美女久久久久| 久久97久久97精品免视看| 日韩欧美中文字幕在线播放| 成人a视频在线观看| 亚洲国产一区二区三区在线观看| 国产精品91久久久久久| 欧美在线一区二区三区四| 亚洲激情视频在线| 国产精品亚洲自拍| 欧美亚洲成人免费| 亚洲免费福利视频| 永久免费毛片在线播放不卡| 成人a免费视频| 97成人在线视频| 亚洲国产精品久久久久| 亚洲色图50p| 欧美日韩国产激情| 亚洲精品福利在线观看| 成人免费看黄网站| 69久久夜色精品国产7777| 成人激情综合网| 日韩高清人体午夜| 精品久久久国产| 国产日韩av高清| 色综合色综合久久综合频道88| 亚洲国产成人精品一区二区| 国产成人jvid在线播放| 国产精品∨欧美精品v日韩精品| 国产精品爱啪在线线免费观看| 中文字幕亚洲激情| www国产亚洲精品久久网站| 日韩欧美国产成人| 欧美国产日产韩国视频| 欧美日韩亚洲视频一区| 国产深夜精品福利| 国产精品色悠悠| 久久久精品在线| 亚洲精品乱码久久久久久金桔影视| 国产欧美日韩精品在线观看|