ホームページ  >  記事  >  バックエンド開発  >  10 分で Symfony を学ぶ、入門用の古典的なチュートリアル、10 分間の symfony_PHP チュートリアル

10 分で Symfony を学ぶ、入門用の古典的なチュートリアル、10 分間の symfony_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 08:59:361007ブラウズ

Symfony の古典的なチュートリアルを学ぶのに 10 分、symfony を 10 分で学ぶ

Symfony は強力な PHP ベースの Web 開発フレームワークです。ここでは、プログラムの追加、削除、変更、チェックを簡単に行うのに 10 分を使用します。 Symfony を知っている人なら誰でも、このチュートリアルを通じて最初の Symfony プログラムを完了できます。

このサンプル プログラムの完全なソース コードが必要な場合は、ここにアクセスするか、次の方法でソース コードを入手できます:

リーリー

プロジェクトの初期化

まず、自分のコンピュータに PHP 環境と git をインストールする必要があります。この内容は、インターネット上に多数のチュートリアルがあるため、ここでは紹介しません。 PHP は 5.4 から始まります。最初はテストサーバーが組み込まれており、Symfony もこのサーバーを PHP に組み込みました。PHP プログラムを開始するには、コマンドラインで $php app/console server:run を使用するだけです。テスト用の Symfony フレームワークに基づいているため、XAMPP のような複雑な統合環境を使用する必要はありません。PHP を直接インストールし、コマンド ラインで php コマンドを実行できることを確認するだけです。

次に、symfony-sample という新しいディレクトリを作成する必要があります。Symfony は、composer というプログラムを使用してさまざまなクラスライブラリの依存関係を管理します。そのため、composer がマシンにインストールされている場合は、このステップを直接スキップできます。インストールされていない場合は、次のコマンドを使用して、composer の最新バージョンをインストールできます。

リーリー

コンポーザーについて詳しく知りたい場合は、このウェブサイトを参照してください。

コンポーザーをインストールした後、最新バージョンの Symfony2.6.0 のインストールを開始できます
コードをコピーします コードは次のとおりです: $php combos.phar create-project symfony/framework-standard-edition mysampleproject/ 2.6.0

インストールプロセス中に、データベースとその他の情報を入力する必要があります。この例では、mysql データベースを使用するので、すべての入力方法を心配する必要はありません。構成。とにかく、インストールが成功すると、Symfony は app/config/parameters.yml という設定ファイルを生成します。以下に、parameters.yml ファイルのサンプルコンテンツを示します。これをコピーするだけです。詳細。

先ほど mysampleproject を作成すると、mysampleproject ディレクトリが symfony-sample ディレクトリに生成されました。私はプログラムをプロジェクトのルートディレクトリに置くことに慣れているので、次のコマンドを実行することで、symfony-sample ディレクトリからプロジェクトを移動できます。 Sample/mysampleproject ディレクトリ、symfony-sample ディレクトリに移動

リーリー

理論的には、Symfony プロジェクトの作成は完了しましたが、先ほど述べたparameters.yml ファイルについてはまだ説明されていません。このparameters.ymlはSymfonyのグローバル設定ファイルであり、データベース設定情報であっても、その他のさまざまな設定であっても、このファイルに配置できます。以下はテストに使用する必要があるparameters.ymlです。最後の行の値をランダムな値に変更することを忘れないでください。 リーリー

この段落を直接使用して、app/config/parameters.yml ファイルの内容を置き換えてから、app/config/config.yml を編集し、次の行を見つけて最後の行を追加して保存します。

リーリー

これで、基本的な Symfony プログラムの構成が完了しました。これで、データベース、電子メール送信者、およびログ システムが構成された基本的なプログラムのプロトタイプが完成しました。次に、独自の Symfony プログラムの作成を開始します。

バンドルを作成

まずバンドルとは何かについて話しましょう。 Symfony は DI をベースにしていますが、それは重要ではありません。Symfony の DI を関数プールとして理解することも、プログラム内のすべての関数をバンドルにすることもできます。 . php ファイルのセットで構成されるプログラムにすることができます。 たとえば、ユーザー登録とログイン機能をバンドル化することもできます。当然、記事管理をバンドル化して、別のバンドルを呼び出して設定することもできます。バンドル: Web サイトを組み立てることができ、作成したさまざまなバンドルを他のアプリケーションで引き続き再利用できるため、新しいプロジェクトを作成する際の再利用性が高まります。

コマンドラインで次のコマンドを使用して、独自のバンドルを作成しましょう。 リーリー

このようにして、SymfonySampleBundle という名前のバンドルが正常に作成されました。使用するバンドル名前空間は Symfony/Bundle/SampleBundle です。これは、Symfony/Bundle/PostBundle や Symfony/ などの他のバンドルを作成することもできます。 Bundle/ArticleBundle、対応するバンドル名はそれぞれ SymfonyPostBundle または SymfonyArticleBundle です。これらのバンドルを自分で作成することもできますが、現在のチュートリアルには影響しません。

ちなみに、作成した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用法实例分析

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/1098686.html技術記事 Symfony を使い始めるための古典的なチュートリアルを 10 分で学びましょう。Symfony は PHP に基づいた強力な Web 開発フレームワークです。ここでは、簡単な追加、削除、変更、チェックを行うのに 10 分かかります。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。