


Implémentation d'une façade Laravel simple à l'aide des traits de fonctionnalités PHP
La colonne tutorielle suivante de Laravel vous présentera comment utiliser les traits PHP pour implémenter une façade simple. J'espère qu'elle sera utile à tout le monde !
Façade
peut m'aider efficacement à mettre en œuvre la méthode des méthodes statiques. Laravel
La plupart des packages d'extension utilisent Facade
. [Recommandé : tutoriel vidéo Laravel]Le simple Façade
suivant Il utilise les fonctionnalités de PHP trait
, la méthode magique __callStatic
et la classe de réflexion ReflectionClass
.
Facade
可以有效帮我实现方法的静态化。Laravel
大部分的扩展包都使用了 Facade
。【推荐:laravel视频教程】
下面的简易 Facade
主要是利用 PHP 的特性 trait
,魔术方法 __callStatic
,反射类 ReflectionClass
。
使用场景
后台系统大部分都会有类似这样的操作:
<?php $user = User::find($id);if (!$user) { throw new \Expection("资源不存在");}
这样似乎没有什么问题,但是还会存在下面这样的:
$article = Article::find($id);if (!$article) { throw new \Expection("资源不存在");}$article->delete();
这样写法十分不优雅。
上代码
1、首先我们应该要有一个 Service
<?phpnamespace App\Services;use App\Traits\ModeServiceTrait;class ModelService extends BaseService{ use ModeServiceTrait;}
2、新建一个 Trait
trait 为了多继承而存在的,可以去 PHP官网 看文档。
<?php namespace App\Traits; use \ReflectionClass; use \Exception;use \ReflectionException; use Illuminate\Database\Eloquent\Model; use App\Exceptions\ResourceException; /** * @method static Model find(string $className, int $id, callable $callback = null) * * @see Model * @package App\Services */trait ModeServiceTrait{ /** * 回调方法 * * @param Model|null $model * @param string $method * @return Model * @throws ResourceException */ public static function callback(Model|null $model, string $method): Model { switch ($method) { case 'first': case 'find': if (!$model) { throw new ResourceException("资源不存在"); } break; default: break; } return $model; } /** * 调用不存在的方法时触发 * * @param $method * @param $args * @return false|mixed * @throws ReflectionException * @throws ResourceException * @throws Exception */ public static function __callStatic($method, $args) { $className = $args[0]; $arg = $args[1]; // 判断模型类是否存在 if (!class_exists($className)) { throw new Exception("The class {$className} could not be found. from:" . __CLASS__); } // 利用反射实例化其类 $reflection = new ReflectionClass($className); $instance = $reflection->newInstanceArgs(); // 调用该不存在的方法 $model = call_user_func_array([$instance, $method], [$arg]); // 如果存在复杂操作交给 callback return isset($args[2]) ? $args[2]($model) : self::callback($model, $method); }}
首先我们关注 __callStatic
这个魔术方法。 当调用不存在的静态方法时会触发该方法。和他相似的魔术方法是 __call
。这是使用 __callStatic
是为了达到 Facade
的效果。
__callStatic
有两个回调参数 $method
是 被调用的且不存在的方法
,$args
是 $method
方法中所传递的参数(数组形式)。
这样一个简易的 trait
就完成了。
使用
我们新建一个 command
$ php artisan make:command TestCommand
写入下面的内容
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use App\Services\ModelService; use App\Models\Article\Article; class TestCommand extends Command{ /** * The name and signature of the console command. * * @var string */ protected $signature = 'test:test'; /** * The console command description. * * @var string */ protected $description = 'a test'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. */ public function handle() { $article = ModelService::find(Article::class, 1); $article = ModelService::find(Article::class, 1, function ($model) { return $model->load('author'); }); }}
其中的 Article
模型需要自己去创建。
接下来就可以看看效果了:
$ php artisan test:test
结语
这样我们就抛弃了使用 abstract
抽象类,来达到了跟 Facade
Scénarios d'utilisation
La plupart des systèmes d'arrière-plan auront des opérations similaires à celle-ci : rrreee
Il ne semble y avoir aucun problème avec cela, mais il y aura également ce qui suit : 🎜rrreee🎜Cette façon d'écrire est très inélégante . 🎜🎜🎜🎜🎜Téléchargez le code🎜🎜🎜🎜🎜🎜1. Tout d'abord, nous devrions avoir un service🎜🎜rrreee🎜🎜🎜🎜2. Créez un nouveau trait🎜🎜🎜, vous pouvez accéder au PHP. site officiel pour voir le document. 🎜rrreee🎜Nous nous concentrons d'abord sur la méthode magique__callStatic
. Cette méthode est déclenchée lorsqu'une méthode statique inexistante est appelée. Une méthode magique similaire est __call
. Ceci utilise __callStatic
pour obtenir l'effet de Facade
. 🎜🎜__callStatic
a deux paramètres de rappel $method
qui est une méthode appelée qui n'existe pas
, $args
Il est le paramètre (sous forme de tableau) passé dans la méthode $method
. 🎜🎜Un trait
aussi simple est complet. 🎜🎜🎜🎜🎜Utilisation🎜🎜🎜Nous créons une nouvelle commande
🎜rrreee🎜Écrivez le contenu suivant🎜rrreee🎜Le modèle Article
doit être créé par vous-même. 🎜Maintenant, vous pouvez voir l'effet :🎜rrreee🎜🎜🎜🎜Conclusion🎜🎜🎜De cette façon, nous abandonnons l'utilisation de la classe abstraite abstract
et obtenons le même effet que Façade
effet. Dans le même temps, la réutilisation du code est également réalisée. 🎜Utiliser le programme de cette manière nécessitera beaucoup plus d'étapes, mais comparées à l'élégance, les performances n'ont pas d'importance. 🎜🎜L'expression n'est pas très claire, il faut la comprendre en profondeur. 🎜 Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

TaskManagementToolsAreEssentialforeFeCiveRemoteProjectManagementByprioriTizingTasksAndTrackingProgress.1) UsetoolslikeTrelloandasanatoSetPriorités withLabelsOrtags.2) EmployTools LikejiraandMonday.comForvisualTrackingwithGantTucsandProgressBars.3)

Laravel10enhances performancethroughseveralkeyfeatures.1) introduducesquerybuildercachingtoredatabaseload.2) itoptimiseseloquentmodelloadingwithlazyloadingproxies.3) itimproveSroutingwithewcachingsystem.4) itenhance

Les meilleures stratégies de déploiement d'applications Laravel complètes comprennent: 1. Un déploiement de temps d'arrêt zéro, 2. Déploiement du bleu-vert, 3. Déploiement continu et 4. Canary Release. 1. Le déploiement de temps d'arrêt zéro utilise l'envoyé ou le déploiement pour automatiser le processus de déploiement pour garantir que les applications restent disponibles lorsqu'elles sont mises à jour. 2. Le déploiement bleu et vert permet le déploiement des temps d'arrêt en maintenant deux environnements et permet un retour rapide. 3. Déploiement continu automatiser l'intégralité du processus de déploiement via GitHubactions ou GitLabci / CD. 4. Canary rejette via la configuration Nginx, promouvant progressivement la nouvelle version aux utilisateurs pour assurer l'optimisation des performances et le retrait rapide.

Toscalealaravelapplication efficace, focaledatabasesharding, cache, chargeur et microservices.1) mettant en œuvre un databaseshardingtodistributedataacrossmultipledatabases pour la performance. 2)

Toovercome Communication BarriersInSiStributedTeams, Utilisation: 1) VideoCallsforface-to-faceteraction, 2) setClearResponSetimeExpectations, 3) ChooseAppropriateCommunicationTools, 4) CreateAteamCommunicationGuide, and5)

LaravelbladeenhancesfronttendTemplatingInfull-stackprojectsByOffreringCleanSyntaxandpowerfulfetures.1)

LaravelisidealForfull-stackApplicationsduetoitselegantsyntax, comprehensivecosystem, andpowerfulfeatures.1) useeloquentormforIntivebackendDatamanipulation, butavoidn 1queryissues.2) employbladetetemplatforcleanfrontwiews, étant acautes overusing @ i i i

Forremotework, iusezoomforvideocalls, slackformessaging, trelloforprojectmanagement, andgithubforcodecollaboration.1) zoomisreliableforlaremeetingsbuthastimelitsonthefreeversion.2) slackintegratewelwithother


Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

VSCode Windows 64 bits Télécharger
Un éditeur IDE gratuit et puissant lancé par Microsoft

Dreamweaver CS6
Outils de développement Web visuel

Dreamweaver Mac
Outils de développement Web visuel

SublimeText3 Linux nouvelle version
Dernière version de SublimeText3 Linux
