Rumah >rangka kerja php >Laravel >Mari kita bincangkan tentang cara menggunakan corak penghias PHP dalam Laravel

Mari kita bincangkan tentang cara menggunakan corak penghias PHP dalam Laravel

青灯夜游
青灯夜游ke hadapan
2022-09-20 11:12:352388semak imbas

Bagaimana untuk menggunakan corak penghias PHP dalam Laravel? Artikel berikut akan memperkenalkan kepada anda cara menggunakan mod penghias PHP dalam Laravel saya harap ia akan membantu anda!

Mari kita bincangkan tentang cara menggunakan corak penghias PHP dalam Laravel

Corak reka bentuk adalah penting untuk setiap pembangun. Ia menyelesaikan masalah yang sangat biasa dalam setiap projek yang anda bina.

Takrifan corak penghias:

Ia membantu anda menambah gelagat tambahan pada objek tanpa menjejaskan objek lain dalam kelas yang sama objek lain.

Wikipedia:

Corak penghias ialah corak reka bentuk yang membolehkan menambah gelagat secara dinamik pada objek tunggal, Tanpa menjejaskan tingkah laku objek lain dalam kelas yang sama

Masalah

Katakan kita mempunyai model Post

class Post extends Model
{
    public function scopePublished($query) {
        return $query->where('published_at', '<=&#39;, &#39;NOW()&#39;);
    }
}

Dalam PostsController kami, kami mempunyai kaedah indeks seperti berikut

class PostsController extends Controller
{
    public function index() {
        $posts = Post::published()->get();
        return $posts;
    }
}

Untuk cache catatan dan mengelakkan pertanyaan pangkalan data setiap kali kami perlu menyenaraikan siaran, kami boleh melakukan perkara berikut

class PostsController extends Controller
{
    public function index() {
        $minutes = 1440; # 1 day
        $posts = Cache::remember('posts', $minutes, function () {
            return Post::published()->get();
        });
        return $posts;
    }
}

Kami kini menyimpan siaran selama 1 hari. Tetapi melihat kod, pengawal tahu terlalu banyak. Ia tahu berapa hari kita telah menyimpannya, ia menyimpan objek itu sendiri.

Begitu juga, katakan anda melaksanakan fungsi yang sama untuk Teg, Kategori, Arkib HomePageController. Itu terlalu banyak kod untuk dibaca dan diselenggara.

Corak Repositori

Dalam kebanyakan kes, corak repositori disambungkan kepada corak penghias.

Pertama, mari kita gunakan mod gudang untuk memisahkan cara mendapatkan siaran dan buat app/Repositories/Posts/PostsRepositoryInterface.php

namespace App\Repositories\Posts;

interface PostsRepositoryInterface 
{

    public function get();

    public function find(int $id);

}

dengan kandungan berikut dalam direktori yang sama . Kandungan PostsRepository

namespace App\Repositories\Posts;

use App\Post;

class PostsRepository implements PostsRepositoryInterface
{
    protected $model;

    public function __construct(Post $model) {
        $this->model = $model;
    }

    public function get() {
        return $this->model->published()->get();
    }

    public function find(int $id) {
        return $this->model->published()->find($id);
    }

}

Kembali ke PostsController dan gunakan perubahan pada

namespace App\Http\Controllers;

use App\Repositories\Posts\PostsRepositoryInterface;
use Illuminate\Http\Request;

class PostsController extends Controller
{
    public function index(PostsRepositoryInterface $postsRepo) {
        return $postsRepo->get();
    }
}

Pengawal menjadi sihat dan mengetahui butiran yang mencukupi untuk menyelesaikan tugas.

Di sini, kami bergantung pada IOC Laravel untuk menyuntik objek khusus antara muka Posts untuk mendapatkan siaran kami

Apa yang perlu kami lakukan ialah memberitahu IOC Laravel kelas mana yang perlu dibuat apabila menggunakan antara muka.

Dalam app/Providers/AppServiceProvider.php anda tambah kaedah pengikatan

namespace App\Providers;

use App\Repositories\Posts\PostsRepositoryInterface;
use App\Repositories\Posts\PostsRepository;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->bind(PostsRepositoryInterface::class,PostsRepository::class);
    }
}

Sekarang apabila kita menyuntik PostsRepositoryInterface Laravel akan mencipta contoh PostsRepository dan mengembalikannya.

Melaksanakan caching melalui penghias

Kami berkata pada mulanya bahawa corak penghias membenarkan menambah tingkah laku pada objek tunggal tanpa Akan menjejaskan objek lain dalam kelas yang sama.

Di sini caching ialah tingkah laku dan objek/kelas ialah PostsRepository.

Mari kita cipta app/Repositories/Posts/PostsCacheRepository.phpPostsCacheRepository

namespace App\Repositories\Posts;

use App\Post;
use Illuminate\Cache\CacheManager;

class PostsCacheRepository implements PostsRepositoryInterface
{
    protected $repo;

    protected $cache;

    const TTL = 1440; # 1 day

    public function __construct(CacheManager $cache, PostsRepository $repo) {
        $this->repo = $repo;
        $this->cache = $cache;
    }

    public function get() {
        return $this->cache->remember('posts', self::TTL, function () {
            return $this->repo->get();
        });
    }

    public function find(int $id) {
        return $this->cache->remember('posts.'.$id, self::TTL, function () {
            return $this->repo->find($id);
        });
    }
}
dengan kandungan berikut dalam

Dalam kelas ini kita menerima objek Caching dan objek PostsRepository dan kemudian menggunakan kelas (penghias) Tambah tingkah laku caching ke Contoh PostsRepository.

Kita boleh menggunakan contoh yang sama untuk menghantar permintaan HTTP kepada sesetengah perkhidmatan dan kemudian mengembalikan model sekiranya berlaku kegagalan. Saya percaya anda akan mendapat manfaat daripada corak ini dan betapa mudahnya untuk menambah tingkah laku.

Perkara terakhir ialah mengubah suai antara muka AppServiceProvider yang mengikat untuk mencipta contoh PostsCacheRepository dan bukannya PostsRepository

namespace App\Providers;

use App\Repositories\Posts\PostsRepositoryInterface;
use App\Repositories\Posts\PostsCacheRepository;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
    public function register()
    {
        $this->app->bind(PostsRepositoryInterface::class,PostsCacheRepository::class);
    }
}

Sekarang semak fail sekali lagi dan anda akan melihat bahawa ia sangat mudah dibaca dan mengekalkan. Begitu juga, ia boleh diuji jika anda memutuskan untuk mengalih keluar lapisan cache pada satu ketika. Anda hanya perlu menukar pengikatan dalam AppServiceProvider. Tiada perubahan tambahan diperlukan.

Kesimpulan

  • Kami belajar cara cache model menggunakan corak penghias
  • Kami menunjukkan cara corak gudang Menyambung kepada Corak Penghias
  • Cara Suntikan Ketergantungan dan Laravel IOC menjadikan hidup kita mudah
  • Komponen Laravel berkuasa

Semoga anda seronok membaca artikel ini. Ia menunjukkan kepada anda corak reka bentuk yang berkuasa dan cara menjadikan projek anda mudah diselenggara dan diurus

Alamat asal: https://dev.to/ahmedash95/design-patterns-in-php- decorator-with -laravel-5hk6

[Cadangan berkaitan: tutorial video laravel]

Atas ialah kandungan terperinci Mari kita bincangkan tentang cara menggunakan corak penghias PHP dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam