Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana cara menggunakan Pimple dengan CakePHP?

Bagaimana cara menggunakan Pimple dengan CakePHP?

WBOY
WBOYasal
2023-06-04 08:32:561016semak imbas

CakePHP ialah rangka kerja PHP popular yang telah menjadi pilihan pertama untuk banyak aplikasi web kerana fleksibiliti dan kemudahan penggunaannya. Pimple ialah bekas suntikan kebergantungan PHP mudah yang membantu pembangun mengurus kebergantungan objek mereka dengan lebih baik. Dalam artikel ini, kita akan belajar cara menggunakan Pimple dalam projek CakePHP.

1. Pasang Jerawat

Sangat mudah untuk memasang Jerawat menggunakan Komposer. Buka terminal dalam direktori akar projek dan jalankan arahan berikut:

composer require pimple/pimple

Ini akan memasang bekas suntikan ketergantungan Pimple dalam projek anda.

2. Cipta bekas suntikan kebergantungan

Buat direktori baharu "src/Container" dalam projek CakePHP anda (jika direktori itu belum wujud). Dalam direktori ini, cipta fail baharu yang dipanggil "Container.php" dan isikan kandungannya dengan kod berikut:

namespace AppContainer;

use PimpleContainer;

class Container extends Container
{
    public function __construct()
    {
        // 注册您的依赖项和服务
    }
}

Dalam pembina kelas ini anda boleh mendaftarkan perkhidmatan atau kebergantungan anda. Contohnya, jika anda ingin mendaftarkan contoh kelas MyService, anda boleh menambah kod berikut pada pembina:

$this->register(new MyService());

Anda juga boleh menggunakan $this['myservice'] untuk mengakses perkhidmatan.

3. Cipta Pengawal

Mari kami andaikan bahawa aplikasi anda memerlukan "Pengawal Pengguna" dengan tindakan berikut:

  1. indeks - memaparkan semua Senarai pengguna
  2. tunjukkan - Tunjukkan butiran setiap pengguna

Mula-mula, mari buat direktori baharu “src/Controller” untuk UserController. Dalam direktori ini, cipta fail baharu yang dipanggil "UserController.php" dan isi kandungannya dengan kod berikut:

namespace AppController;

use AppContainerContainer;

class UserController extends AppController
{
    protected $container;
    
    public function __construct(Container $container)
    {
        $this->container = $container;
        parent::__construct();
    }
    
    public function index()
    {
        $userRepository = $this->container['repository.user'];
        $users = $userRepository->findAll();
        $this->set(compact('users'));
    }
    
    public function show($id)
    {
        $userRepository = $this->container['repository.user'];
        $user = $userRepository->findById($id);
        $this->set(compact('user'));
    }
}

Dalam contoh ini, kami menggunakan bekas sebagai "$userRepository" sebagai kelas UserService Instance disuntik ke dalam "UserController".

4. Perkhidmatan Pendaftaran

Kini, kami mencipta direktori baharu "src/Repository" untuk gudang. Dalam direktori ini, cipta fail baharu yang dipanggil "UserRepository.php" dan isikan kandungannya dengan kod berikut:

namespace AppRepository;

use AppModelEntityUser;

class UserRepository
{
    protected $entityManager;
    
    public function __construct(EntityManager $entityManager)
    {
        $this->entityManager = $entityManager;
    }
    
    public function findAll()
    {
        return $this->entityManager->getRepository(User::class)->findAll();
    }
    
    public function findById($id)
    {
        return $this->entityManager->getRepository(User::class)->find($id);
    }
}

Repositori ini memerlukan kebergantungan yang dipanggil "EntityManager". Mari tambahkan ini ke dalam bekas Jerawat kami. Dalam fail Container.php kami, tambahkan baris berikut:

$this['repository.user'] = function ($c) {
    return new AppRepositoryUserRepository($c['entity_manager']);
};
$this['entity_manager'] = function ($c) {
    // 配置和返回Doctrine的EntityManager实例
};

Di sini kami mentakrifkan kelas UserRepository sebagai perkhidmatan yang dipanggil "repository.user" dan menyediakan entiti yang dipanggil "entity_manager" menggunakan perkhidmatan suntikan dependency.

5. Selesai

Sekarang kami telah melengkapkan semua tetapan. Kami kini boleh menggunakan bekas dalam aplikasi kami dan menggunakan suntikan kebergantungan untuk mengurus kebergantungan objek kami.

Dengan menggunakan Pimple, kami boleh menguruskan kebergantungan kami dengan mudah dan mengelakkan gandingan yang ketat antara kelas. Ia menjadikan ujian dan penyelenggaraan kod lebih mudah kerana ia memudahkan untuk menukar kebergantungan.

Perhatikan bahawa apabila menggunakan suntikan kebergantungan, instantiasi langsung dalam kelas harus dielakkan. Sebaliknya, kebergantungan ini harus disuntik ke dalam pembina kelas atau kaedah penetap autoloading untuk ujian unit yang mudah dan pemfaktoran semula kod.

Saya harap artikel ini dapat membantu anda lebih memahami cara menggunakan Pimple untuk suntikan pergantungan dalam CakePHP dan memberikan anda pengalaman pembangunan yang lebih baik.

Atas ialah kandungan terperinci Bagaimana cara menggunakan Pimple dengan CakePHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn