Aksesori dan pengubah suai yang elegan dalam Laravel

WBOY
Lepaskan: 2023-08-29 22:54:01
asal
1105 orang telah melayarinya

Aksesori dan pengubah suai yang elegan dalam Laravel

Dalam artikel ini, kami akan memperkenalkan pengubah suai dan pengakses Eloquent ORM dalam rangka kerja web Laravel. Selepas pengenalan, kita akan memahami konsep ini melalui beberapa contoh.

Dalam Laravel, pengubah suai dan pengakses membenarkan anda menukar data sebelum menyimpannya atau mendapatkan data daripada pangkalan data. Khususnya, mutator membenarkan anda menukar data sebelum menyimpannya ke pangkalan data. Aksesori, sebaliknya, membenarkan anda menukar data selepas mendapatkannya daripada pangkalan data.

Malah, model Laravel ialah tempat utama di mana anda boleh membuat pengubah suai dan kaedah pengakses. Sudah tentu, adalah bagus untuk mempunyai semua pengubahsuaian anda di satu tempat dan bukannya berselerak di tempat yang berbeza.

Buat aksesori dan pengubah suai dalam kelas model

Sekarang anda sudah biasa dengan konsep asas pengubah suai dan aksesori, kami akan meneruskan untuk membangunkan contoh praktikal untuk menunjukkannya.

Saya andaikan anda tahu tentang model Eloquent dalam Laravel, kami akan menggunakan model Post sebagai titik permulaan untuk contoh. Jika anda belum mencipta model Post lagi, mari buat model itu menggunakan perintah artisan. Post 模型作为示例的起点。如果您还没有创建 Post 模型,让我们使用 artisan 命令来创建它。

php artisan make:model Post --migration
Salin selepas log masuk

这应该在 app/Post.php 中创建一个模型文件,如下所示。

<?php
 
namespace App;
 
use Illuminate\Database\Eloquent\Model;
 
class Post extends Model
{
    //
}
Salin selepas log masuk

让我们用以下内容替换该文件的内容。

<?php
namespace App;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Casts\Attribute;

class Post extends Model
{
    /**
     * Interact with the user's name attribute.
     *
     * @param  string  $value
     * @return \Illuminate\Database\Eloquent\Casts\Attribute
     */
    protected function name(): Attribute
    {
        return Attribute::make(
            get: fn ($value) => ucfirst($value),
            set: fn ($value) => strtolower($value),
        );
    }
}
Salin selepas log masuk

由于我们使用了 --migration 选项,它还应该创建关联的数据库迁移。以防万一您不知道,您可以运行以下命令,以便它实际在数据库中创建表。

php artisan migrate
Salin selepas log masuk

为了运行本文中的示例,您需要在 post 表中创建 name 列。无论如何,我们不会详细讨论迁移的细节,因为这超出了本文的范围。

Mutator 方法

首先,我们来看看 mutator 方法。

protected function name(): Attribute
{
    return Attribute::make(
        #get: fn ($value) => ucfirst($value),
        set: fn ($value) => strtolower($value),
    );
}
Salin selepas log masuk

正如我们之前讨论的,修改器用于在将数据保存到数据库之前更改数据。如您所见,mutator 方法的语法为 {attribute-name}。当然,您需要将 {attribute-name} 替换为驼峰大小写的实际属性名称。需要注意的是,所有访问器和修改器方法都会返回一个 Attribute 实例,该实例定义如何访问和修改属性。

在属性上调用 mutator 方法时,将使用 set 参数。为了简单起见,我们只使用了 strtolower 函数,该函数在将帖子标题保存到数据库之前将其转换为小写。

通过这种方式,您可以在表的所有列上创建变异方法。接下来,我们来看看访问器方法。

访问器方法

如果在将数据保存到数据库之前使用变元来更改数据,则访问器方法用于在从数据库获取数据后更改数据。要定义访问器方法,您需要在定义属性时提供 get 参数。

让我们看一下访问器方法。

protected function name(): Attribute
{
    return Attribute::make(
        get: fn ($value) => ucfirst($value),
        #set: fn ($value) => strtolower($value),
    );
}
Salin selepas log masuk

从数据库获取 name 属性的值后,将调用 get 参数。在我们的例子中,我们刚刚使用 ucfirst 方法来更改帖子标题。

到目前为止,我们刚刚创建了赋值器和访问器方法,但我们将在接下来的部分中测试它们。

变异器的作用

让我们在 app/Http/Controllers/MutatorController.php 创建一个控制器,以便我们可以测试我们在前面部分中创建的 mutator 方法。

<?php
// app/Http/Controllers/MutatorController.php
namespace App\Http\Controllers;
 
use App\Post;
use App\Http\Controllers\Controller;
 
class MutatorController extends Controller
{
    public function index()
    {
        // create a new post object
        $post = new Post;
        $post->name = 'Post Title';
        $post->save();
    }
}
Salin selepas log masuk

此外,您还需要在 routes/web.php 文件中创建关联的路由才能访问 mutator 控制器。

Route::get('mutator/index', 'MutatorController@index');
Salin selepas log masuk

index 方法中,我们使用 Post 模型创建一个新帖子。它应该将 name 列的值设置为 post title 值,因为我们在相应的 mutator 方法中使用了 strtolower 函数。

操作中的访问器

要查看操作中的访问器,让我们继续创建一个包含以下内容的控制器文件 app/Http/Controllers/AccessorController.php

<?php
namespace App\Http\Controllers;
 
use App\Post;
use App\Http\Controllers\Controller;
 
class AccessorController extends Controller
{
    public function index()
    {
        // load post
        $post = Post::find(1);
         
        // check the name property, it should be output of the ucfirst function
        echo $post->name;
        exit;
    }
}
Salin selepas log masuk

同样,您需要在 routes/web.php 文件中使用关联的路由来访问访问器控制器。

Route::get('accessor/index', 'AccessorController@index');
Salin selepas log masuk

index 方法中,我们首先使用 Post 模型来加载示例帖子。

接下来,我们检查 name rrreee

Ini seharusnya membuat fail model dalam app/Post.php seperti yang ditunjukkan di bawah.

rrreee

Mari kita gantikan kandungan fail ini dengan kandungan berikut. 🎜 rrreee 🎜Memandangkan kami menggunakan pilihan --migration, ia juga harus membuat migrasi pangkalan data yang berkaitan. Sekiranya anda tidak tahu, anda boleh menjalankan arahan berikut supaya ia benar-benar mencipta jadual dalam pangkalan data. 🎜 rrreee 🎜Untuk menjalankan contoh dalam artikel ini, anda perlu mencipta lajur name dalam jadual post. Walau apa pun, kami tidak akan membincangkan butiran penghijrahan kerana itu di luar skop artikel ini. 🎜

Kaedah mutator

🎜Pertama, mari kita lihat kaedah mutator. 🎜 rrreee 🎜Seperti yang kita bincangkan sebelum ini, pengubah suai digunakan untuk menukar data sebelum menyimpannya ke pangkalan data. Seperti yang anda lihat, sintaks kaedah mutator ialah {attribute-name}. Sudah tentu, anda perlu menggantikan {attribute-name} dengan nama atribut sebenar dalam kes unta. Adalah penting untuk ambil perhatian bahawa semua kaedah pengakses dan pengubah suai mengembalikan contoh Attribute, yang mentakrifkan cara untuk mengakses dan mengubah suai atribut. 🎜 🎜Apabila memanggil kaedah mutator pada sifat, parameter set akan digunakan. Untuk memudahkan, kami hanya menggunakan fungsi strtolower, yang menukar tajuk siaran kepada huruf kecil sebelum menyimpannya ke pangkalan data. 🎜 🎜Dengan cara ini anda boleh mencipta kaedah mutasi pada semua lajur jadual. Seterusnya, mari kita lihat kaedah pengakses. 🎜

Kaedah aksesori

🎜Jika anda menggunakan pembolehubah untuk menukar data sebelum menyimpannya ke pangkalan data, kaedah pengakses digunakan untuk menukar data selepas mendapatkannya daripada pangkalan data. Untuk menentukan kaedah pengakses, anda perlu memberikan parameter get apabila mentakrifkan harta tersebut. 🎜 🎜Mari kita lihat kaedah pengakses. 🎜 rrreee 🎜Selepas mendapat nilai atribut name daripada pangkalan data, parameter get akan dipanggil. Dalam kes kami, kami hanya menggunakan kaedah ucfirst untuk menukar tajuk siaran. 🎜 🎜Setakat ini kami baru sahaja mencipta kaedah penyerah hak dan akses, tetapi kami akan mengujinya di bahagian seterusnya. 🎜 🎜Peranan mutator🎜 🎜Mari kita buat pengawal dalam app/Http/Controllers/MutatorController.php supaya kita boleh menguji kaedah mutator yang kita buat di bahagian sebelumnya. 🎜 rrreee 🎜Selain itu, anda perlu mencipta laluan yang berkaitan dalam fail routes/web.php untuk mengakses pengawal mutator. 🎜 rrreee 🎜Dalam kaedah index, kami membuat siaran baharu menggunakan model Post. Ia harus menetapkan nilai lajur name kepada nilai post title kerana kami menggunakan strtolower dalam fungsi kaedah mutator yang sepadan. 🎜 🎜Aksesori dalam tindakan🎜 🎜Untuk melihat pengakses sedang beraksi, mari teruskan dan buat fail pengawal app/Http/Controllers/AccessorController.php dengan kandungan berikut: 🎜 rrreee 🎜Sekali lagi, anda perlu menggunakan laluan yang berkaitan dalam fail routes/web.php untuk mengakses pengawal akses. 🎜 rrreee 🎜Dalam kaedah index, kami mula-mula memuatkan contoh siaran menggunakan model Post. 🎜 🎜Seterusnya, kami menyemak nilai lajur nama, ia harus dimulakan dengan huruf besar kerana kami telah menentukan kaedah pengakses untuk lajur ini. 🎜 🎜Beginilah cara mutator dan aksesori Fasih berfungsi! 🎜

KESIMPULAN

Hari ini, kami meneroka konsep pengubah suai dan aksesori untuk ORM Fasih dalam Laravel. Ia menyediakan cara terbaik untuk menukar data sebelum menyimpannya ke pangkalan data dan mengekstraknya daripada pangkalan data.

Bagi anda yang baru bermula dengan Laravel atau ingin mengembangkan pengetahuan, tapak web atau aplikasi anda dengan sambungan, kami mempunyai pelbagai kandungan untuk anda pelajari daripada Pasaran Envato.

Atas ialah kandungan terperinci Aksesori dan pengubah suai yang elegan dalam Laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!