容器

把服务放到容器里,需要服务的时候从容器那里要。

drupal container:debug

文件:

modules/custom/ninghao/ninghao.services.yml

内容:

services:
  ninghao.hello:
    class: Drupal\ninghao\Service\Greeting

Controller:

namespace Drupal\ninghao\Controller;

use Symfony\Component\HttpFoundation\Response;
use Drupal\ninghao\Service\Greeting;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;

class NinghaoController extends ControllerBase {
  private $greeting;

  public function __construct(Greeting $greeting) {
    $this->greeting = $greeting;
  }

  public function hello() {
    $hello = $this->greeting->sayHello();

    return new Response($hello);
  }

  public static function create(ContainerInterface $container) {
    $greeting = $container->get('ninghao.hello');
    return new static($greeting);
  }
}

创建的控制器,Drupal 会自动去创建一个控制器对象。这次我们让自己的控制器继承了 ControllerBase 类,并且在控制器里实施了 create 方法,在这个方法里可以让我们自己去创建控制器对象,方法有个参数就是 $container,这是 Drupal 的容器对象,在这个对象里我们用 get 方法得到了指定的服务:ninghao.hello,在创建控制器对象的时候,我们把这个服务对象交给了控制器。

在控制器里添加 __construct 函数,它接收一个参数,就是传递给它的服务对象,这里就是 Greeting 对象。在类里添加一个属性叫 $greeting,把创建控制器对象的时候传递过来的 $greeting 服务对象交给这个控制器的 $greeting 属性里面。这样我们就可以在控制器里使用这个服务对象里的方法了。比如 sayHello() 就是 Greeting 服务里的一个方法。

results matching ""

    No results matching ""