


Basé sur PHP Laravel, parlons des moyens d'écrire du code PHP moins « mauvais » ! !
Cet article vous donnera une introduction détaillée sur la façon d'écrire du code PHP moins "mauvais" ! ! Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Ceci est écrit pour les enfants qui sont des veaux nouveau-nés et qui n'ont pas peur des tigres. Vous pouvez le lire à volonté. Ce chapitre est basé sur PHP Laravel
Préface
Les gens demandent souvent
- Comment mieux concevoir le répertoire ?
- Comment bien diffuser le code ?
- Comment écrire un projet maintenable ?
J'écris également sur les "mauvais" projets. Ce qui suit est basé sur le résumé d'articles et l'expérience de développement personnel de grands experts d'Internet. 🎜>
Controller
<?php namespace App\Http\Controller; class UserController extends Controller{ public function register(Request $request){ $user = new User(); $user->username = $request->input('username'); $user->password = $request->input('password'); $result = $user->save(); return $result; } }
<. 🎜>
ServiceLe service lui-même est traduit par service
Injecter des méthodes externes et des méthodes publiques dans Service- Injecter le service dans le contrôleur
Comme l'image ci-dessus
<?php
namespace App\Http\Controller;
class UserController extends Controller{
public $request;
protected $userService;
public function __construct(Request $request, UserService $userService)
{
$this->request = $request;
$this->userService = $userService;
}
public function register()
{
//... validation
return $this->userService->register ($this->request->all());
}
}
Copier après la connexion
UserService<?php namespace App\Http\Controller; class UserController extends Controller{ public $request; protected $userService; public function __construct(Request $request, UserService $userService) { $this->request = $request; $this->userService = $userService; } public function register() { //... validation return $this->userService->register ($this->request->all()); } }
<?php
namespace App\Service;
class UserService{
public function register($data)
{
$username = $data['username'];
$password = $data['password'];
$password = encrypt ($password);
$user = new User();
$user->username = $username;
$user->password = $password;
$result = $user->save();
return $result;
}
}
Copier après la connexion À présent, nous avons au moins une séparation nette entre les affaires et les demandes. Mais ce n'est toujours pas satisfaisant. Si toutes les affaires et CURD sont écrites dans Service, cela transférera simplement la surcharge du Contrôleur vers Service, et alors Service n'aura aucun sens dans l'existence.
Par conséquent, nous devons continuer à diviser le service et à séparer les opérations R de la base de données, car les opérations de CUD sont fondamentalement les mêmes, tandis que les opérations R deviennent colorées en fonction de la complexité de l'entreprise. Donc opération R autonome. Nous faisons ici référence au concept de Référentiel.
Référentiel<?php namespace App\Service; class UserService{ public function register($data) { $username = $data['username']; $password = $data['password']; $password = encrypt ($password); $user = new User(); $user->username = $username; $user->password = $password; $result = $user->save(); return $result; } }
Nous utilisons le référentiel pour aider le modèle à encapsuler la logique de requête pertinente dans différents référentiels afin de faciliter la maintenance du code logique
Principe unique conforme à SOLID- Inversion de dépendance conforme à SOLID
<?php
namespace App\Http\Controller;
class UserController extends Controller{
public $request;
protected $userService;
public function __construct(Request $request, UserService $userService)
{
$this->request = $request;
$this->userService = $userService;
}
public function getUserInfo()
{
//... validation
return $this->userService->getUserInfo ($this->request->all());
}
}
Copier après la connexion
UserService<?php namespace App\Http\Controller; class UserController extends Controller{ public $request; protected $userService; public function __construct(Request $request, UserService $userService) { $this->request = $request; $this->userService = $userService; } public function getUserInfo() { //... validation return $this->userService->getUserInfo ($this->request->all()); } }
<?php
namespace App\Service;
class UserService{
public $userRepository;
public function __construct(UserRepository $userRepository){
$this->userRepository = $userRepository;
}
public function getUserInfo()
{
return $this->userRepository->getUserInfo($data);
}
}
Copier après la connexion
UserRepository<?php namespace App\Service; class UserService{ public $userRepository; public function __construct(UserRepository $userRepository){ $this->userRepository = $userRepository; } public function getUserInfo() { return $this->userRepository->getUserInfo($data); } }
<?php
namespace App\Repository;
class UserRepository{
public function getUserInfo($data)
{
$userId = $data['user_id'];
$result = User::where('id',$userId)->first();
return $result;
}
}
Copier après la connexion a résolu le problème de R. Quelqu'un a demandé, peut-il être mis en place parce que CUD est déjà relativement unifié et simple ? La réponse est NON, nous citons un nouveau nom Action.
Action<?php namespace App\Repository; class UserRepository{ public function getUserInfo($data) { $userId = $data['user_id']; $result = User::where('id',$userId)->first(); return $result; } }
J'ai appris cela après avoir lu l'article de @Charlie_Jade
Indépendant de chaque fichier d'opération, tel que CreateUser ,DeleteUser ,UpdateUserConforme au principe unique de SOLID
<?php
namespace App\Http\Controller;
class UserController extends Controller{
public $request;
protected $userService;
public function __construct(Request $request, UserService $userService)
{$this->request = $request;$this->userService = $userService;
}
public function register(){
//... validation return $this->userService->register($this->request->all());
}
public function getUserInfo()
{return $this->userService->getUserInfo ($this->request->all());
}
}
Copier après la connexion
UserService<?php namespace App\Http\Controller; class UserController extends Controller{ public $request; protected $userService; public function __construct(Request $request, UserService $userService) {$this->request = $request;$this->userService = $userService; } public function register(){ //... validation return $this->userService->register($this->request->all()); } public function getUserInfo() {return $this->userService->getUserInfo ($this->request->all()); } }
<?php
namespace App\Service;
class UserService{
public function getUserInfo(UserRepository $userRepository)
{ return $this->userRepository->getUserInfo($data);
}
public function register(){ $result = (new CreateUser())->execute($this->request->all());
return $result;
}
}
Copier après la connexion
UserRepository<?php namespace App\Service; class UserService{ public function getUserInfo(UserRepository $userRepository) { return $this->userRepository->getUserInfo($data); } public function register(){ $result = (new CreateUser())->execute($this->request->all()); return $result; } }
<?php
namespace App\Repository;
class UserRepository{
public function getUserInfo($data)
{ $userId = $data['user_id']; $result = User::where('id',$userId)->first();return $result;
}
}
Copier après la connexion
CreateUser<?php namespace App\Repository; class UserRepository{ public function getUserInfo($data) { $userId = $data['user_id']; $result = User::where('id',$userId)->first();return $result; } }
<?php
namespace App\Action;
use App\Model\Member;
class CreateUser extends CreateUserWallet
{
public function execute(array $data)
{$models = new Member();$models->tel = $data['tel'];$models->password = $data['password'];$result = $models->save ();return $result;
}
}
Copier après la connexionLa logique de code ci-dessus est affichée dans le figure ci-dessous
En plus des modèles (V) et autres HTML, JS, etc., d'autres règles, ou méthodes, sont nécessaires pour réaliser le découplage de certains codes Non. des exemples de code sont fournis ci-dessous.
Common
est traduit par public, couramment utilisé dans certains développements, vous pouvez avoir besoin de certaines méthodes publiques (classes non publiques, telles que l'envoi d'e-mails, etc. ) Il n'est pas approprié de l'utiliser), comme vérifier le solde de l'utilisateur, vérifier si l'utilisateur est enregistré ou en ligne, générer un numéro de commande, etc. Utiliser Common est encore plus simple. Cela ressemble plus à une bibliothèque de fonctions publiques
Événement
Vous pouvez choisir de l'utiliser lorsque vous ne vous souciez pas des résultats d'exécution, mais Event's Listen fournit également une file d'attente.
Exception
N'utilisez pas Return pour renvoyer tous vos messages d'erreur. Dans de nombreux cas, votre retour peut ne pas être votre retour
Apprentissage recommandé : ". Tutoriel vidéo PHP》
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!
<?php namespace App\Action; use App\Model\Member; class CreateUser extends CreateUserWallet { public function execute(array $data) {$models = new Member();$models->tel = $data['tel'];$models->password = $data['password'];$result = $models->save ();return $result; } }


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

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

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

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

CakePHP est un framework MVC open source. Cela facilite grandement le développement, le déploiement et la maintenance des applications. CakePHP dispose d'un certain nombre de bibliothèques pour réduire la surcharge des tâches les plus courantes.

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie
