Before you develop a marketing strategy, you should ask yourself what your business strategy is. Your marketing strategy should be based on your business strategy and brand strategy. Your marketing strategy is not equal to your business strategy.
学习Symfony之一:初识Symfony
最早知道Symfony这个PHP框架是在几年前,当时被它的名字所吸引,“Symfony”和“Symphony”谐音,是“交响曲”的意思,自然让人想到创始人应该是位古典音乐爱好者,因而顿时对它增添了好几分的亲切感。当时因为没有太多的应用机会,也没有过多地深入学习,但这份好感却一直保留在心里。
再次看到Symfony这个名字,却非常意外地是在一篇介绍即将发布的Drupal 8的文章里——Drupal从版本8开始使用Symfony作为底层框架构建,也就是说,Drupal 8将会是一个Symfony的应用!Symfony也在它网站首页的明显位置打出了“全球最流行的内容管理平台之一的drupal采用Symfony搭建”等字样。这真是一个让人又惊又喜的消息。同时,这也让我不得不开始重新认识一下Symfony了。
标准的MVC结构
Symfony是一个标准的纯MVC结构的系统,这点和drupal完美契合。我们知道,MVC是指Model-View-Controller(模式-视图-控制器),虽然MVC已经不是一个新的概念,但它所提供的理论确实催生了众多优秀的系统,并且给Web开发带来过系统性的变革。纯的MVC系统,如Symfony和drupal,只有一个唯一的前端控制器。Symfony的前端控制器没有遵循惯例叫做index.php,而是叫做app.php,这是因为Symfony还提供一个app_dev.php的控制器,通过调用不同的配置参数,可以方便地实现开发环境和生产环境的切换。
上图摘自Symfony的官方教程,演示了Symfony的控制器是如何工作的。可以看出,任何请求的路径(图中的/, /contact, /blog等)都被提交到前端控制器(Front Controller),前端控制器会通知Symfony内核对路径进行分析,再调用路由系统(Routing)来定位到相应的控制器,控制器执行相应的代码,最后把响应结果发送到客户端。
精简的内核
Symfony的内核相当精简,因为绝大部分的功能都是由第三方代码库提供,Symfony把这些叫做Vendors。令人吃惊的是,提供很多核心功能的Symfony自己也是作为一个Vendor而存在的。通过配置autoload,你可以实现自动加载应用所需的代码库。
要开发Symfony上的应用,就是在Symfony内核的基础上去扩展功能。Symfony把扩展的功能叫做Bundles。每个Bundle会定义一些路径以及每个路径对应的代码。
除了Bundle所需的一些资源文件,如图片、CSS和Javascript等,其他的所有PHP代码,包括Vendors和Bundles中定义的所有代码,都可以放在Web目录以外的私有目录下,因此Symfony的代码是绝对安全的。
使用Composer
手工管理代码是一件枯燥又容易出错的工作,Symfony推荐使用Composer来进行代码依赖管理。
Composer是一个PHAR,即可执行的PHP代码包(Php ARchive)。Java程序员都熟悉JAR,PHAR则相当于PHP世界里的JAR。
比方说你的一个应用用到了多个第三方类库,而分别去下载这每一个类库既繁琐又容易搞错版本或放错位置。有了Composer,你可以把应用中用到的所有代码库写到一个json格式的配置文件里,然后运行:
php composer.phar install
Composer就可以把所需代码库的正确版本下载到当前位置下的vendors目录下,轻松又可靠。
Composer还可以做很多事情,比如升级第三方代码库、创建bundle等等,甚至包括Symfony的初始安装都可以用Composer来完成,我打算在下一篇博客中演示。
最后,Symfony是交响曲,而Composer有作曲家的意思,如此应景第一个名字很难让人相信这仅仅是巧合吧?