cmf快速入门之整体概况

在十分钟之内了解symfony CMF!本章将介绍Symfony CMF的基本概念并让你开始接触它。

主要的是你要知道symfony CMF是许多bundle组成的,当用symfong框架构建一个CMS时,它会提供你需要的通用功能。在你深入阅读之前,你应该对symfony框架有一个基础的认识。如果你不知道symfony框架,你应该从Symfony Framework Quick Tour.开始阅读。

解决框架和CMS的两难境地

在开始一个新项目之前,在这里有一个两难的抉择,你是需要一个框架还是需要一个CMS。当选择使用框架,你需要去花费更多的时间在你的项目中去创建CMS的特性。在其他方面,当选择一个CMS时,你会发现自定义一些功能变得更加困难。你也不可能或者至少定制CMS的核心部分变得很困难。

这个CMF就可以解决框架和CMS的两难境地。他提供了很多的bundle,所以你可以很容易的添加CMS特性到你的项目中。他还提供了很多灵活性,并且你在任何时候都可以使用框架,所以你可以根据你自己的方式去创建自定义的功能。他会调用一个decoupled CMS.

提供的这个bundle需要跟CMF一起工作,但他也能单独的工作。这意味着你不需要添加所有的bundle,你可以决定你要是用的那一个即可(例如,我只需要RoutingBundle 和 MediaBundle)。

 

下载Symfony CMF标准版本

当你想要在新的项目中使用CMF时,你就要下载Symfony CMF标准版本。这个Symfony CMF标准版本类似于Symfony Standard Edition,但包含和配置了基本的CMF bundle。它还增加了一些非常简单的bundle来显示一些基本的Symfony CMF特性。

下载Symfony CMF标准版本要使用composer:

在安装过程中如果遇到

解决办法注释掉AppKernel.php文件中的

并运行以下命令即可继续

 

 

设置数据库

现在只剩下创建数据了。当你使用symfony应用时,你可能需要去做这样的事情,但在symfony CMF需要一个数据库为了使用admin接口时,很多事情都可以配置。
快点开始吧,假设你开启了sqlite扩展。之后运行下面的命令:

 如果你想了解更多的symfony CMF数据库层,在下一张就有介绍。

关于具体的安装指南,可以查看 Installing the Standard Edition

 

Request 流

当你的php环境不低于5.4时,使用server:run命令去运行一个本地服务来展示demo。或者,使用一个localhost并加上url(/path-to-project/web/app_dev.php/.)

现在,这个标准版已经可以使用了。来到首页(http://localhost:8000/)去去看看这个demo:

big-picture-home

 

你看到在我们的demo里已经有了一个完整的网站。让我们去仔细看看一个symfony CMF应用的request 流:

request_flow

首先,你看到上面的白块是典型的symfony request流。它把创建的request对象传入到router(路由器),执行controller并且这个controller使用model去生成view,放置到response里。

除此以外,这个CMF添加了绿色的块。在未来的章节里,你将会学习更多关于他们的单独知识。

 

Model

在创建这个CMF之前,这个团队在使用数据库上做了很多的研究。他们最终发现了JCR,一个java的内容存储库。连同其他开发者创建了PHPCR,一个php的JCR规范。

PHPCR使用一个目录结构。他存储元素在一个大树(树状结构)里。元素有一个父类并且还有子类。

尽管PHPCR是CMF团队的首要选择,这个bundle并不绑定哪一个特定的存储系统。一个bundle也提供ORM整合和分词

您还可以轻松地添加你自己的Model。

Router

在symfony中,这些路由存储在配置文件中。这意味着仅一个设计者就可以改变路由。在一个cms中,你想要去改变他们网站的路由需要admin。这就是为什么symfony引进了一个DynamicRouter。

这个DynamicRouter加载一些路由,从数据库中匹配这个request,并尝试找到准确的匹配。可以使用一个admin接口编辑,删除和创建数据库中路由。admin可以全面控制每一件事情。

因为你也可能先要使用其他路由,就像普通的symfony 路由,这个cmf还提供一个ChainRouter。一个chain router包含一连串的其他路由并更具路由匹配顺序执行他们。

使用一个数据库去存储路由使它有可能从这个路由引用其他的文档。这意味着一个路由能有一个Content对象。

 在further in the Quick Tour.中你将学习更多关于路由的知识。

 

Controller

当一个路由匹配时,一个Controller被执行。这个controller通常只是从路由中获取Content对象并渲染他。因为它几乎总是一样的,CMF使用一个通用的控制器,它将执行。从一个路由或者Content对象设置一个特定的Controller覆盖它。

View

使用RoutingBundle,你能够配置渲染的Content对象,通过一个特定模板或者控制器。通用的控制器会渲染这个模板。

一个View还使用了一个菜单,通过KnpMenuBundle提供,并且他还集成了Create.js,为了及时编辑。

 

添加一个新页面

现在你知道了request流,你能够开始添加一个新的页面了。在symfony CMF标准版里,这个数据存储在数据文件中,当执行doctrine:phpcr:fixtures:load命令时他就被加载了。添加一个新页面,你只需要编辑这样的一个数据文件,在本地的src/Acme/DemoBundle/Resources/data目录中:

之后,你需要去运行 doctrine:phpcr:fixtures:load去映射到数据库,并刷新,你就能够看到新的页面了!

big-picture-new-page

 

现场编辑

现在你可以作为网站的管理员,使用web接口来编辑内容。点击Admin Login 并提供认证信息。

你将在顶部看到有一个工具条:

big-picture-createjs-bar

这个工具条是通过Create.js库产生的。Symfony CMF因为使用CreateBundle所以集成了CreatePHP和Create.js库。当你阅读这个页面你可以使用所见即所得编辑器编辑这个页面。

现在你能够借助Create.js来改变我们新页面的页面内容:

big-picture-edit-page

点击“save”之后,这个内容会更新并使用CreateBundle保存这个改变。

 

总结

恭喜,你已经到了symfony CMF 第一部分介绍的尽头。这儿还有很多需要你去发现,但你应该看到Symfony CMF怎样让你的设计出更好的CMS。如果你想要发现更多,来看看下一章吧“ Model”。

发表评论