D8 Inyección de servicios en la clase controladora (current user) - pierregermain/MyDrupal GitHub Wiki

Inyección de servicios en la clase controladora

Fichero services.yml

No olvides agregar el argumento en el fichero de servicio

services:
  mymodule.myclass:
    class: Drupal\mymodule\MyClass
    arguments: ['@current_user' ]

Acceso directo al contenedor de servicios sin DI

Los servicios disponibles se definen en los archivos .services.yml

if (\Drupal::currentUser()->hasPermission('administer nodes')) {
//...
}
if(\Drupal::service('current_user')->hasPermission('administer nodes')) {
//...
}

Inyección de servicios en la clase controladora (current user)

<?php
use Symfony\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Session\AccountInterface;

class myController extends ControllerBase {

  protected $currentUser;

  public function __construct(AccountInterface $current_user) {
    $this->currentUser = $current_user;
  }

  public static function create(ContainerInterface $container) {
    return new static($container->get('current_user'));
  }
}

Uso:

if($this->currentUser->hasPermission('administer nodes')){
  //...
}

Inyección de servicios en la clase controladora (current date)

<?php
use Drupal\Core\Datetime\DateFormatter;
// ...


class myController extends ControllerBase {

  protected $dateFormatter;

  public function __construct(DateFormatter $dateFormatter) {
    $this->dateFormatter = $dateFormatter;
  }

  public static function create(ContainerInterface $container) {
    return new static($container->get('date.formatter'));
  }

// ...

}

Uso:

$mydate = $this->dateFormatter->format(time(), '', 'Y:m:d');