symfony2框架

1.什么是php框架?
  PHP框架提供了一个用以构建web应用的基本框架,从而简化了用PHP编写web应用程序的流程。
通过确保适当的数据库交换和在表现层编码,框架还可以帮助初学者建立更稳定的应用服务


2.为什么应该使用框架开发?
   开发人员使用PHP框架的好处很多,其中之一是加快开发进程。开发人员可以把时间花在实际应用的开发上,而不是每一个项目都重新构建基础功能。
稳定是开发者使用框架的另一个重要原因。虽然简单是PHP最大的优点,很多人也因为这一点喜欢使用这个脚本语言,但它同时也是PHP最大的缺点,使用框架的另外一个重要目的是分工合作。

3.在什么情况下使用框架?
  决定是否使用框架的主要因素是项目的大小。
  如果你想开发一个只有5到10个网页的简单网站,少量的数据库访问,并且不需要保证速度或者提供文档,那么你只要用PHP就够了。这种情况下使用web开发框架并没有太大的价值,而且面向对象或者MVC模型会使开发速度变慢。
  如果你要开发一个更复杂的有更多业务逻辑的web应用程序,那么单独使用PHP是不够的。如果你打算以后维护或扩展你的应用程序,那么你的代码需要是简洁,易读和高效的。如果你打算在用户界面中方便的使用最新的技术(例如Ajax),你不能只是写几百行Javascript代码。如果你想愉快而且快速的开发,那么单独使用PHP可能会令你失望。上面这些,就是框架适合你的原因。

4.环境要求:
确认你安装了Web服务器(如Apache、Nginx)和5.3.2以上版本的PHP。


5.下载
http://symfony.com/download

5.1 symfony2的优点:
   Symfony2集成了许多技术的优点,包括工具和概念,你将学到大多数人多年来努力的方向。换句话说,你不只是在学习Symfony2,你还学习Web基础、最佳开发实践以及在Symfony2内部或单独使用的那些新的、令人惊喜的PHP库

6.目录结构介绍:
   www/ <- 你的Web服务器根目录
    Symfony/ <- 解压后的文件
        app/ <- 存放symfony的核心文件的目录
            cache/  <- 存放缓存文件的目录
            config/ <- 存放应用程序全局配置的目录
            logs/   <- 存放日志的目录
            Resources/
        bin/   <- 批处理文件 (用于命令行或者cron的脚本)
        src/  <- 应用程序源代码
            Acme/
                DemoBundle/
                    Controller/
                    Resources/
                    ...
        vendor/   <- 供应商或第三方的模组和插件
            symfony/
            doctrine/
            ...
        web/   <- Web入口
            app.php  <-程序统一入口
            ...

7.安装
将php5.3.24里面的php.ini-development重命名为php.ini 复制到 c:\windows\下面,并修改如下内容

短标记
short_open_tag = Off 改为 short_open_tag = On

7.1打开如下扩展
extension=php_mbstring.dll
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll

7.2修改时间
date.timezone = PRC

7.3 指定php扩展目录
; On windows:
; extension_dir = "ext"改为 extension_dir = "D:/AppServ/php5/ext"

在D:\AppServ\Apache2.2\conf\httpd.conf 打开apache重写

 symfony检查安装环境
  http://localhost/Symfony/web/config.php

  symfony自带的欢迎页面
  http://127.0.0.1/Symfony/web/app_dev.php/

  symfony数据库配置
  http://127.0.0.1/Symfony/web/app_dev.php/_configurator/step/0

8、运行程序
  symfony的应用程序的统一入口是 app.php 但是框架本身为我们提供开发环境与生产环境的的区别
  如果是开发环境那么应用程序的统一入口是 app_dev.php ,生产环境是 app.php


  输入地址:http://localhost/Symfony/web/app.php 大家会发现没有内容

            http://127.0.0.1/Symfony/web/app_dev.php   欢迎页面   

分析程序:
   从上面的过程我们可以看出,symfony是没有默认输出页面的,但是它是有统一入口脚本文件的。
     app_dev.php  应用程序的统一入口,这是一个前端控制器 front controller 用来响应用户的各种需求


9、理解symfony的运行机制:
      D:\AppServ\www\Symfony\app\config 是配置文件
      路由配置
      routing.yml  <----生产环境配置 
      routing_dev.yml <---开发环境配置,所以我们进入该配置文件

我们来了解一下路由规则:
_welcome:   <---定义模块名 
    pattern:  / <---路由配置 这里代表根目录,也就是说在:http://127.0.0.1/Symfony/web/app_dev.php 不追加其他控制器的默认控制这时候就会是默认
    defaults: { _controller: AcmeDemoBundle:Welcome:index } <--- _controller: 定义控制器这是语法格式后面要根一个完整的路径名

如果是下面的路由
http://localhost/Symfony/web/app_dev.php/demo/hello/Fabien 
通过这个路由我们知道 控制器是  demo  方法是 hello  参数是 fabien


symfony 运行机制图


 我们来看一下它的路由配置
_demo:
    resource: "@AcmeDemoBundle/Controller/DemoController.php"  <---源文件目录 @代表当前项目
    type:     annotation  <--anno会自动替换url中的hello
    prefix:   /demo   <---指向根目录的前缀

 @Route("/hello/{name}", name="_demo_hello")  注意这是规则

我们来输出一个hello  word
  找到D:\AppServ\www\Symfony\src\Acme\DemoBundle\Controller\WelcomeController.php  下面的  indexAction() 我们输出一个helloword  

我们再来回顾一下symfony2的mvc的机制; 参考;http://symfony.com/doc/current/book/routing.html
   
应用程序从 /                                                                                                     homepageAction()------>返回结果 response
         


            /contact  -->     front controoler(前端控制器)  ---->symfony2 kerner(symfony2核控制器)--->分发某个动作contactAction()----->response
         



            /blog                                                                                                 bolgAction()-------->response






10. 了解基本概念
  YAML:
YAML是一种直观的能够被电脑识别的数据序列化格式,并且它容易被人类阅读,容易与脚本语言交互的。换种说法,YAML是一种非常简单的类似于XML的数据描述语言,语法比XML简单很多。他在描述可以被转化成数组或者hash的数据是非常有用

 比如下面的数组
$house = array(
  'family' => array(
    'name'     => 'Doe',
    'parents'  => array('John', 'Jane'),
    'children' => array('Paul', 'Mark', 'Simone')
  ),
  'address' => array(
    'number'   => 34,
    'street'   => 'Main Street',
    'city'     => 'Nowheretown',
    'zipcode'  => '12345'
  )
);
 
用yaml来描述
  house:
  family:
    name:     Doe
    parents:
      - John
      - Jane
    children:
      - Paul
      - Mark
      - Simone
  address:
    number: 34
    street: Main Street
    city: Nowheretown
    zipcode: 12345


YAML这种格式大约是2001年出现的,目前为止已经有多种语言的YAML解析器。不过它很直观,你用不着更深入地研究YAML。

MVC模式
MVC架构包含三层,这是web设计的经典应用模式:
模型(model)代表程序操作的信息--业务逻辑。 
视图(view)将模型用网页的形式展现出来从而与用户进行交互。 
控制器(controller)通过调用合适的模型或者视图来回应用户的动作
MVC架构的原理是把代码根据类型分成三层。数据逻辑代码放在模型里,表现代码放在视图里,应用逻辑代码放在控制器里。


应用程序、模块与动作
  什么是网站中的应用程序:
  在一个项目里,操作按照逻辑划分成不同的应用程序。同一个项目里面的不同应用程序相互独立。大多数情况,一个项目会包含两个应用程序:一个是前台,一个后台,它们共享同一个数据库。

  什么是模块:
   每个应用程序由一个或更多模块组成,模块就是功能相近的一个页面或者一组页面。

  什么是动作:
   模块包含动作,也就是说一个模块可以包含多个动作。
   
在实际的开发中,如果你的项目过于复杂那么我们需要重构代码(也就是说通过重写代码来改善结构与可读性(同样保留功能)被称为重构)  


  代码包:
      bundle这个词的使用频率很高。在Symfony2框架里编写的代码,都需要按照代码包的形式来组织。根据Symfony2里的定义,一个代码包是指用来实现一个独立功能的符合一定目录结构的一系列文件(包括PHP文件、样式表文件,JavaScript文件,图片,等等)。代码包使得代码的复用变得更容易。


9.symfony核心类
symfony的MVC核心的几个类:
   sfController 控制器类。它解析请求并交给动作处理。 
   sfRequest 保存所有的请求元素(参数,cookie,请求的头 等)。 
  sfResponse 包含回应的头和内容。它的内容最终会转化为HTML传给用户。 
 


10.编码规范
   在symfony的编码规范中:
      控制器: 驼峰命名法多个单词首字母大写、文件名与类名相同
      方法:    方法名 + Action()




11.创建自己的hello word
  在routing.yaml里面
    _home:
    pattern:  /  <--正则
    defaults: { _controller: AcmeDemoBundle:Home:index }  <--映射到这个控制器下面的方法

在D:\AppServ\www\Symfony\src\Acme\DemoBundle\Controller 下面创建 HomeController.php 控制器

<?php
namespace Acme\DemoBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response

class HomeController extents Controller{
   
    public  function indexAction(){
       return new Response('Hello world!'); //返回一个response
    }

}
?>

12、创建自己的bundle(模块或者功能)

bundle目录包含跟实现内容有关的所有东西,包括PHP文件,模板,样式表,javascript文件,测试内容以及其它任何相关的东西。要实现的内容的各方面都保存在一个bundle中。 

一个应用程序是由在AppKernel类中registerBundles()方法里定义的所有bundle组成
D:\AppServ\www\Symfony\app\AppKernel.php

public function registerBundles()
    {
        $bundles = array(
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
            new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new JMS\AopBundle\JMSAopBundle(),
            new JMS\DiExtraBundle\JMSDiExtraBundle($this),
            new JMS\SecurityExtraBundle\JMSSecurityExtraBundle(),
        );

        if (in_array($this->getEnvironment(), array('dev', 'test'))) {
            $bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
            $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
        }

        return $bundles;
    }

现在我们来手动创建 AcmeTestBundle并让它能够在我们的应用程序中工作。注意,这里的Acme是一个虚假的提供商名字,你完全可以替换它为你自己组织或公司的名字

 第一步: 首先,创建一个src/Eduask/TestBundle/ 目录并添加新文件EduaskTestBundle.php

D:\AppServ\www\Symfony\src\Eduask\TestBundle\EduaskTestBundle.php


<?php
namespace Eduask\TestBundle; <-命名空间 必须以供应商名开始
use Symfony\Component\HttpKernel\Bundle\Bundle;
class EduaskTestBundle  extends  Bundle{

}

?>
/**
namespace 开头使用提供商名,接着是分类段(可以省略),最后是命名空间的简写名字,而且该名字必须以Bundle作为后缀。
*/



第二步: 注册你的Bundle应用
命令创建项目:
php app/console generate:bundle --namespace=Acme/TestBundle  如果你使用上面的命令行工具,则创建的bundle会自动的注册到appKernel类中
说明:在我的pc上运行命令没有成功,所以我是手动创建bundle应用

D:\AppServ\www\Symfony\app\AppKernel.php
 注册你的应用Bundle
  
  $bundles[] = new Eduask\TestBundle\EduaskTestBundle();


第三步:创建应用目录结构(我们这里复制symfony2给的Acm示例,并把内容清空)
D:\AppServ\www\Symfony\src\Eduask\TestBundle\
  Controller/ 包含Bundle的所有控制器文件
  Dependencylnjection/  该目录不是必须的,功能是: 保存了特定的依赖注入扩展类,该类可能会导入服务配置,注册编译器传输或者更多其它 
  Resources / 项目资源目录
  -----------config  存放配置文件
  -----------public  存放公共文件比如 css/js/images
  -----------------css
  -----------------images
  -----------------js
  -----------views  存放视图模板文件 格式: 控制器/action.html.twig
  Tests / 保存bundle所有的测试

第四步:配置路由
D:\AppServ\www\Symfony\app\config\routing.yml

_welcome:
    pattern:  /
    defaults: { _controller: EduaskTestBundle:Welcome:index }


第五步:控制器
  D:\AppServ\www\Symfony\src\Eduask\TestBundle\Controller\WelcomeController.php

<?php

namespace Eduask\TestBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class WelcomeController extends Controller{
    public function indexAction(){
    	  return new Response('hello Eduask work!');
    }
}

?>


第六步 运行:
http://127.0.0.1/Symfony/web/app_dev.php/


13、研究路由规则(注意路由格式与规则---不要想当然的哦)
 
_welcome_user:
    pattern:  /user/{name}
    defaults: { _controller: EduaskTestBundle:Welcome:user }

对应url: http://127.0.0.1/Symfony/web/app_dev.php/user/aaa

<?php

namespace Eduask\TestBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;

class WelcomeController extends Controller{
    public function indexAction(){
    	  return new Response('hello Eduask work!');
    }
    
    public function userAction($name){
    	  return new  Response($name);  //输出:aaa
    }
}

?>

路由配置是给参数设置默认值
_welcome_user:
    pattern:  /user/{name}

你可能感兴趣的:(Web,框架,面向对象,web服务器,symfony)