Symfony学习十分钟入门经典教程(2)

这样就成功建立了我们的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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/c8c8c1db8c5709d5859a400347b9b320.html