目錄
Symfony学习十分钟入门经典教程,symfony十分钟
您可能感兴趣的文章:
首頁 php教程 php手册 Symfony学习十分钟入门经典教程,symfony十分钟

Symfony学习十分钟入门经典教程,symfony十分钟

Jun 13, 2016 am 08:46 AM
php框架 symfony 入門教學

Symfony学习十分钟入门经典教程,symfony十分钟

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 install
parameters:
  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: UTF8
path:   "%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:bundle
Bundle namespace: Symfony/Bundle/SampleBundle
Bundle name [SymfonySampleBundle]:
Target directory [/home/saharabear/workspace/symfony-sample/src]:
Configuration format (yml, xml, php, or annotation): yml
Do you want to generate the whole directory structure [no]? yes
Do you confirm generation [yes]? yes
Generating the bundle code: OK
Checking that the bundle is autoloaded: OK
Confirm automatic update of your Kernel [yes]? yes
Enabling the bundle inside the Kernel: OK
Confirm 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:entity
Welcome to the Doctrine2 entity generator
This 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:Article
Determine the format to use for the mapping information.
Configuration format (yml, xml, php, or annotation) [annotation]:yml
Instead 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): title
Field type [string]:
Field length [255]: 200
New field name (press to stop adding fields): content
Field type [string]: text
New field name (press to stop adding fields): author
Field type [string]:
Field length [255]: 20
New field name (press to stop adding fields):
Do you want to generate an empty repository class [no]? yes
Summary before generation
You are going to generate a "SymfonySampleBundle:Article" Doctrine2 entity
using the "yml" format.
Do you confirm generation [yes]? yes
Entity generation
Generating the entity code: OK
You 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 --force
Updating database schema...
Database schema updated successfully! "1" queries were executed

登入後複製

增删改查

好了,我们来做一个针对文章的增删改查操作。首先请执行下面的命令:

$ php app/console generate:doctrine:crud
 Welcome to the Doctrine2 CRUD generator
This 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 help
you defining it.
You must use the shortcut notation like AcmeBlogBundle:Post.
The Entity shortcut name: SymfonySampleBundle:Article
By 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]? yes
Determine the format to use for the generated CRUD.
Configuration format (yml, xml, php, or annotation) [annotation]: yml
Determine the routes prefix (all the routes will be "mounted" under this
prefix: /prefix/, /prefix/new, ...).
Routes prefix [/article]: /article
 Summary before generation
You are going to generate a CRUD controller for "SymfonySampleBundle:Article"
using the "yml" format.
Do you confirm generation [yes]? yes
 CRUD generation
Generating the CRUD code: OK
Generating 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博客 ,转载时请注明出处及相应链接。

更多关于PHP框架相关内容感兴趣的读者可查看本站专题:《php优秀开发框架总结》,《codeigniter入门教程》,《CI(CodeIgniter)框架进阶教程》,《Yii框架入门及常用技巧总结》及《ThinkPHP入门教程》

希望本文所述对大家基于Symfony框架的PHP程序设计有所帮助。

您可能感兴趣的文章:

  • 高性能PHP框架Symfony2经典入门教程
  • PHP的Symfony和CodeIgniter框架的Nginx重写规则配置
  • Symfony数据校验方法实例分析
  • symfony表单与页面实现技巧
  • Symfony页面的基本创建实例详解
  • 如何在symfony中导出为CSV文件中的数据
  • Symfony2 session用法实例分析
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP框架的優缺點比較:選哪個好? PHP框架的優缺點比較:選哪個好? Jun 04, 2024 pm 03:36 PM

PHP框架的選擇取決於專案需求和開發者技能:Laravel:功能豐富,社群活躍,但學習曲線陡峭,效能開銷高。 CodeIgniter:輕量級,易於擴展,但功能有限,文件較少。 Symfony:模組化,社群強大,但複雜,效能問題。 ZendFramework:企業級,穩定可靠,但笨重,許可昂貴。 Slim:微框架,速度快,但功能有限,學習曲線陡峭。

在不同開發環境中 PHP 框架的效能差異 在不同開發環境中 PHP 框架的效能差異 Jun 05, 2024 pm 08:57 PM

不同开发环境中PHP框架的性能存在差异。开发环境(例如本地Apache服务器)由于本地服务器性能较低和调试工具等因素,导致框架性能较低。相反,生产环境(例如功能齐全的生产服务器)具有更强大的服务器和优化配置,使框架性能显著提高。

PHP框架與微服務:雲端原生部署與容器化 PHP框架與微服務:雲端原生部署與容器化 Jun 04, 2024 pm 12:48 PM

PHP框架與微服務結合的好處:可擴展性:輕鬆擴展應用程序,添加新功能或處理更多負載。靈活性:微服務獨立部署和維護,更容易進行更改和更新。高可用性:一個微服務的故障不會影響其他部分,確保更高可用性。實戰案例:使用Laravel和Kubernetes部署微服務步驟:建立Laravel專案。定義微服務控制器。建立Dockerfile。建立Kubernetes清單。部署微服務。測試微服務。

PHP框架與DevOps的整合:自動化與敏捷性的未來 PHP框架與DevOps的整合:自動化與敏捷性的未來 Jun 05, 2024 pm 09:18 PM

將PHP框架與DevOps整合可提高效率和敏捷性:自動化繁瑣任務,釋放人員精力專注於戰略任務縮短發布週期,加快上市時間提高代碼質量,減少錯誤增強跨職能團隊協作,打破開發和運營孤島

最佳的微服務架構PHP框架:效能與效率 最佳的微服務架構PHP框架:效能與效率 Jun 03, 2024 pm 08:27 PM

最佳PHP微服務框架:Symfony:靈活性、效能和可擴充性,提供組件套件用於建構微服務。 Laravel:專注效率和可測試性,提供乾淨的API接口,支援無狀態服務。 Slim:極簡主義,速度快,提供簡單的路由系統和可選的中體建構器,適用於建構高性能API。

PHP框架中人工智慧的應用潛力 PHP框架中人工智慧的應用潛力 Jun 03, 2024 am 11:01 AM

人工智慧(AI)在PHP框架中的應用潛力包括:自然語言處理(NLP):用於分析文本、識別情感和生成摘要。影像處理:用於辨識影像物件、進行臉部偵測和調整大小。機器學習:用於預測、分類和聚類。實戰案例:聊天機器人、個人化推薦、詐欺偵測。整合AI可增強網站或應用程式功能,提供強大的新功能。

哪種 PHP 框架提供最全面的擴充函式庫,方便快速開發? 哪種 PHP 框架提供最全面的擴充函式庫,方便快速開發? Jun 04, 2024 am 10:45 AM

PHP框架擴充庫選擇提供了四種框架:Laravel:以其龐大的生態系統和第三方套件而著稱,提供認證、路由、驗證等擴充。 Symfony:高度模組化,透過可重複使用的「Bundle」擴展了功能,涵蓋身份驗證、表單等領域。 CodeIgniter:輕量級且高效能,提供資料庫連接、表單驗證等實用擴充。 ZendFramework:企業級功能強大,擁有身分驗證、資料庫連線、RESTfulAPI支援等擴充功能。

PHP框架與人工智慧:開發人員指南 PHP框架與人工智慧:開發人員指南 Jun 04, 2024 pm 12:47 PM

使用PHP框架整合人工智慧(AI)以簡化AI在Web應用程式中的集成,建議框架:Laravel:輕量高效,功能強大。 CodeIgniter:簡單易用,適用於小型應用程式。 ZendFramework:企業級框架,功能完善。 AI整合方式:機器學習模型:執行特定任務。 AIAPI:提供預先建置功能。 AI庫:處理AI任務。

See all articles