Saya baru mengenal layanan (dan drupal 8!) Dan mencoba mencari tahu layanan. Saya pikir mungkin saya hanya melakukan pembuatan dengan cara yang ketinggalan zaman. Yang ingin saya lakukan adalah menjadikan layanan 'hello generator' saya dan menyebutnya di pengontrol lain dengan yang berikut:
DBController.php
namespace Drupal\db\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\db\DbServices\HelloGenerator;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\Response;
class DBController extends ControllerBase
{
private $helloGenerator;
public function __construct(HelloGenerator $x) {
$this->helloGenerator = $x;
}
public function say($count) {
$hello = $this->helloGenerator->getHello($count);
return new Response($hello);
}
public static function create(ContainerInterface $container) {
$x = $container->get('db.hello_generator');
return new static ($x);
}
}
HellGenerator.php
namespace Drupal \ db \ DbServices;
class HelloGenerator {
public function getHello($count) {
$foo = 4 + 4 + 4;
return $foo . ' ' . $count;
}
}
db.services.yml
services:
db.hello_generator:
class: Drupal\db\DbServices\HelloGenerator
db.db_says:
path: /db/says/{count}
defaults:
_controller: '\Drupal\db\Controller\DBController::say'
requirements:
_permission: 'access content'
Jawaban:
Ada 3 pertanyaan di sini:
1. Buat pengontrol
1.1 Tambahkan kelas pengontrol - Anda berhasil. Untuk yang lain lihat dokumentasi Drupal
1.2 Tambahkan file perutean - sepertinya ini tidak ada dalam kode Anda:
my_module.routing.yml
lihat dokumentasi Drupal
2. Buat layanan
2.1 Tambahkan kelas layanan - Anda berhasil.
2.2 Tambahkan file perutean - Anda melakukannya meskipun berisi kode tambahan milik file perutean. Ini yang Anda butuhkan:
my_module.services.yml
lihat dokumentasi Drupal
3. Gunakan layanan dalam pengontrol
Kamu berhasil. Berikut referensi untuk yang lain:
3.1 Ganti
create()
metodeKelas controller mewarisi metode ini dari
class ControllerBase
. Perannya adalah untuk membuat objek pengontrol. Tonton argumen metode: itu melewati wadah layanan. Ekstrak layanan yang Anda butuhkan dan berikan kepada konstruktor:3.2 Memulai layanan di
__construct()
3.3 Mulai menggunakan layanan
sumber
create()
metode saya . Saya kira Anda tidak akan mengatakan itu meskipun jika saya tidak melewatkan sesuatu yang seharusnya sudah jelas ... Saya kira layanan itu tidak objek koneksi kolam renang?