Symfony服务

  1. 服务的创建

     # 创建Bundle
     php bin/console generate:bundle --env=dev
     Bundle name:TestBundle
    
     # 修改TestBundle\Resources\config\services.yml
     services:
         # 服务名
         user_login:
             # 服务文件路径
             class: TestBundle\Services\Login
             # 服务中传递服务(以Orm)为例
             arguments: ["@doctrine.orm.default_entity_manager"]
    
     # 创建TestBundle\Resources\config\config.yml
         # TestBundle\Resources\config\config.yml
         # 登录相关的配置
         key1: val1
         key2: val2
    
     # 创建服务文件TestBundle\Services\Login.php
     <?php
    
     namespace TestBundle\Services;
    
     use Symfony\Component\Yaml\Yaml;
    
     class Login
     {
         private $orm;
         private $config;
    
         /**
          * 构造函数
          */
         public function __construct($orm)
         {
             //服务中调用传递过来的服务
             $this->orm = $orm;
         }
    
         /**
          * 用户登陆
          * @param $user_name
          * @param $password
          */
         public function userLogin($user_name, $password)
         {
             ...
         }
    
         /**
          * 析构函数
          */
         public function __destruct(){
             unset($this->orm);
             unset($this->config);
         }
     }
    
  2. 服务中调用服务

     Symfony服务中传递、调用服务上文(步骤1)已经说明,不在多余描述
    
  3. Symfony控制器中调用服务

     <?php
    
     namespace TestBundle\Controller;
    
     class UserController extends Controller
     {
         ...
         public function UserLoginAction()
         {
             //调用登录服务
             $user_login = $this->get("user_login");
         }
     }
    
  4. 命令行中调用服务

     $user_login = $this->getContainer()->get("user_login");
    
  5. Symfony控制器 构造函数construct中调用服务

     在src/TestBundle/TestBundle.php添加如下代码
    
     use Symfony\Component\DependencyInjection\ContainerInterface;
    
     ...
    
     private static $containerInstance = null;
    
     public function setContainer(ContainerInterface $container = null)
     {
         parent::setContainer($container);
         self::$containerInstance = $container;
     }
    
     public static function getContainer()
     {
         return self::$containerInstance;
     }
    
     构造函数调用:
     use TestBundle\TestBundle;
    
     $rbac = TestBundle::getContainer()->get('user_login');
    

results matching ""

    No results matching ""