php框架symfony学习。(2)Bundle

Symfony Bundles

bundle类似于其他软件中的插件,但却更好。
关键区别在于:Symfony中的每一样东西都是bundle,包括框架核心功能,以及你编写的程序代码。

一个bundle可以理解成一个插件,但比插件好用。我们写的内容就可以拆分成一个个的bundle(
symfony会自动生成一个APPBundle,里面包含控制器Controller 测试文件Tests ,AppBundle.php起到标识作用,表明这是个bundle
继承Bundle。Symfony\Component\HttpKernel\Bundle\Bundle
创建新的Bundle的时候,程序注册的时候会实例化Bundle类。各个Bundle可以实现不同的功能。
要在你的程序中使用bundle,必须通过 AppKernel 类的 registerBundles() 方法来注册并使用它们
比如写一个博客,可以建立一个BlogBundle,包含自己的控制器、视图、类库文件等的功能集合...而且可以被其他Bundle调用!

控制器(Controller)
所有控制器继承Symfony\Bundle\FrameworkBundle\Controller\Controller这个类
对于类里的每个方法接收一个request请求,然后返回一个response对象。

当浏览器访问服务器会产生一个Request类的实例,而我们的一次响应就可以看做成一个Response类的实例。

用注释定义路由 /* Route("/",name = "homepage")*/
这句注释指定了一个路由,当访问/的时候,就调用这个动作。indexAction里面的代码返回一个响应。
//用annotation来定义路由的方式。 另外也可以用yml或者xml等等。

响应类需要导入Symfony\Component\HttpFoundation\Response

在路由中传参/*@Route("/hello/{name}/{sex}",name = "hellopage")*/
在url中用/斜杠分开
在参数中也必须和路由中命名一致
public function myAction($name,$sex){
 $msg = "姓名:".$name." | 性别:".$sex;
 $response = new Response($msg);
 return $response;
}
地址栏访问localhost/symfony的项目路径/项目名/hello/小明/男
这种传值方式很方便,但是也存在问题,所有的路由都传递到这。
此时可以在Route里面加自定义传递参数的类型
requirements表示要遵守的定义规则 用正则来约束。
使用php app/console debug:router 可以查看当前定义的所有路由。
对于同一个路由的不同动作,永远只取第一个。后续不生效!

创建一个Bundle
做一个自己的Bundle , myBundle
创建方法 : php app/console generate:bundle    可选项-namespace -format
跟着提示一步一步操作
配置文件的格式建议使用yaml 
根目录下src目录多了一个文件夹 就是刚才我们创建的Bundle的命名
myBundle中:Controller中存放的都是控制器文件名为xxxController.php
  DependencyInJection中存放的是依赖项 (类库)
   Resource中存放的一些资源,配置文件,视图,路由信息等
  Tests存放的测试有关的文件
myBundle.php是一个php的类,可以理解为这个Bundle的众多文件的一个代表。
当然我们也可以用第三方的Bundle

yaml格式的路由,后缀名.yml 

路径为Resources/config/routing.yml 

控制器 渲染视图 访问路由 查看到控制器渲染的模板

yaml格式的路由创建挺简单的,一般来说不如注释风格的路由方便,但是给人以更加统一的感觉。

对于Bundle使用的路由类型可以在routing.yml中查看。









你可能感兴趣的:(php)