php框架symfony学习。(3)Service

 对于一个框架的service,就可以理解为任何一个执行一些全局任务的php对象。无论何时需要调用他们,他们都存在,可以为我们提供服务。 其实服务是一个类库的封装,这些类可以完成一些功能,但是只有一个类被暴露出来,来提供一个可以来完成所有事情的接口。

服务与依赖注入

它的思想就是提供了一个容器(Container)来注册这些服务,取的时候直接从容器获取即可。

恩 ,每个框架都有它独特的实现机制,都是个独立的思想。

myBundle的DependencyInjection目录下有两个文件是sf给提供的服务Configuration.php和MyExtension.php

我们在这创建一个自己的服务,可以理解为一个类的集合。Person.php

<?php
namespace MyBundle\DependencyInjection;

class Person{
   Private $name;
   Private $gender;
public function __construct($name,$gender){
   $this->name = $name;
   $this->gender = $gender;
 }
public function setMsg($name = "未知姓名","未知性别"){
 $this->name = $name;
 $this->gender = $gender;
 }
public function getMsg(){
$str = ''; 
$str = "当前姓名是:".$this->name."<br/>";
$str = "当前性别是:".$this->gender."<br/>";
return $str;
 }
}
?>

之后要注入服务,在MyBundle目录下的Resources目录下的config目录下有一个services.yml的文件

需要在services.yml的文件中添加内容 类地址MyBundle\DependencyInjection\Person  服务名Person 构造函数的参数"未知姓名","未知性别"

services:
   person:
       class:MyBundle\DependencyInjection\Person
   arguments:["未知姓名","未知性别"]

这样类被注入到了服务列表了,然后可以调用它了,在routing.yml中添加路由my_servpage

my_servpage:
 path: /my/serv
 defaults:{_controller:MyBundle:Default:serv}

路由添加完毕后就可以在控制器里写一个Action了

public function servAction(){
    $serv = $this->get('person');     //根据服务器名获取服务,得到类的对象
    $serv -> setMsg("王者荣耀","女"); //给变量赋值,设置属性
    $str = $serv->getMsg();           //获取变量的值,调用对象
    return new Response($str);        //输出
}
这样就简历了自己的服务,并在控制器中使用。


服务在symfony中并不是一个特别复杂的概念,我们可以理解为很多框架中的函数库,所不同的是,

它是把库直接注入到容器中,在使用的时候直接使用get(“服务名”)的格式就可以了。

如果不适用依赖注入的话是这样调用的:

在指定位置创建类,通常是lib或者vender等目录,在使用的时候导入或者自动加载,然后实例化。

这中方式的耦合性非常强,导致程序灵活性极度下降。

对于依赖注入的我们的整体流程如下:

创建一个类,然后把它注册到相应容器中

直接根据名字来获取这个类的一个实例。

这样的好处:类的地址更加自由,不用非得写到vendor目录下面,只要注册的时候根据路径能找到它即可。

                    类的命名更加自由,不管是什么,直接注入进去。解耦。

很多新一代的框架都提出了服务的概念,对于symfony来说由于我们代码是划分为一个个Bundle的,因此服务可以

直接写在bundle中。一般由于服务都使用了延迟加载的机制,因此我们并不担心它的性能问题,而且我们不必知道具体

的类名,这样我们在开发的时候会很方便。




 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值