Home > Article > Backend Development > Based on PHP Laravel, let's talk about ways to write less 'bad” PHP code! !
This article will give you a detailed introduction on how to write less "bad" PHP code! ! It has certain reference value. Friends in need can refer to it. I hope it will be helpful to everyone.
Written to children who are newborn calves and are not afraid of tigers, you can read it at will This chapter is based on PHP Laravel
People often ask
I also write about "bad" projects. The following is based on the summary of articles and personal development experience of major Internet experts.
Controller, as the name suggests, is a controller. When you get started with PHP, you know that Controller represents the C layer in MVC. The concept of MVC itself is code separation, which teaches you how to separate businesses. However, as the business continues to develop, the complexity of the code also increases, and the links between functions are intricate. In the end, your MVC becomes As shown in the figure below, relying solely on the MVC design idea can no longer support the growing business.
Now we redefine the tasks and capabilities of the Controller. The controller only controls Http Reqeust requests, which complies with the SOLID single function principle.
Writing the business code directly in the Controller will make the code extremely bloated and difficult to maintain and expand.
<?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; } }
At this time, we should think about how to separate the business code. We introduce the concept of Service
Service itself is translated as service
Like the picture above
<?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; } }
Until now, we have at least completely separated the business from the request. But it is still unsatisfactory. If all business and CURD are written in Service, it will just transfer the bloat of Controller to Service, and then Service will have no meaning in existence. Therefore, we need to continue to divide the Service and separate the R operations of the database, because the operations of CUD are basically the same, while the R operations become more colorful according to the complexity of the business. So standalone R operation. At this time we refer to the concept of Repository.
We use Repository auxiliary Model to encapsulate relevant query logic into different repositories to facilitate the maintenance of logic code
<?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); } }
<?php namespace App\Repository; class UserRepository{ public function getUserInfo($data) { $userId = $data['user_id']; $result = User::where('id',$userId)->first(); return $result; } }
This is what I learned after reading @Charlie_Jade’s articleIndependent of each operation file, such as CreateUser ,DeleteUser,UpdateUser
<?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; } }
<?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; } }The above code logic is shown in the figure below
In addition to templates (V) and other HTML, JS, etc., some other rules, or methods, are needed to achieve decoupling of some codes. No code examples are provided below.
CommonYou can choose to use it when you don’t care about the execution results, but Event’s Listen also provides a queue.
Don’t use Return to return all your error messages. In many cases, your return may not be your return
Recommended learning: "PHP Video Tutorial》
The above is the detailed content of Based on PHP Laravel, let's talk about ways to write less 'bad” PHP code! !. For more information, please follow other related articles on the PHP Chinese website!