当前位置: 首页 > news >正文

大型国企网站建设费用wordpress 主题开发环境

大型国企网站建设费用,wordpress 主题开发环境,专门网页制作工具,虚拟主机网站后台前言 随着开发经验的增加#xff0c;也伴随团队开发的积累#xff0c;规范开发显得越来越重要#xff0c;本文给大家提供一些laravel开发的进阶思路和经验#xff0c;让大家开发更加统一规范#xff0c;代码看起来更加优雅。 1.更多使用第三方库。团队开发的时候#xf…前言 随着开发经验的增加也伴随团队开发的积累规范开发显得越来越重要本文给大家提供一些laravel开发的进阶思路和经验让大家开发更加统一规范代码看起来更加优雅。 1.更多使用第三方库。团队开发的时候各个人的开发经验和思考方式不同也有一些思维局限性可以多多使用第三方库统一代码开发规范。 2.抛弃传统MVC模式在结构上分出更新的结构分层进行代码解耦。一般分为下面几层 数据验证层Request负责验证请求参数单独创建一个验证请求器避免验证逻辑放在控制器中验证例如: Laravel框架使用FormRequest Laravel中使用FormRequest进行表单验证及对验证异常进行自定义处理_51CTO博客_laravel 表单验证 TP框架使用FormRequest thinkphp6 FormRequest,laravel 表单验证_think\request和laravel-CSDN博客 控制器层Controller负责接收参数、验证参数、调用各个模块的服务层可以用事务包裹用到其他服务的可以注入多个服务、返回响应、返回视图等 服务层Service负责具体的业务逻辑实现将原本控制器的负责流程按模块拆分为一个个小的服务方便给控制器层组合调用一般不要跨模块调用服务服务中可以调用本模块的仓库层方法 仓库层Repository调用模型层封装一些负责的查询方便服务层调用一般负责只查询本模块的内容 模型层Model只包含默认的表属性表名、字段等和联表关系 更多层级 环境搭建 为了不重复造轮子和方便命令行创建文件本文直接用laravel自带的FormRequest和第三方phpno1-architecture这两个包进行开发示例这两个库的具体使用可以参考下面几篇文章 https://learnku.com/articles/9763/open-source-wheel-laravel-project-architecture-extension-package Laravel中使用FormRequest进行表单验证及对验证异常进行自定义处理_51CTO博客_laravel 表单验证 Laravel实现表单验证(多场景适用于API)_laravel formrequest scenes-CSDN博客 创建laravel项目 composer create-project laravel/laravel your_project_name安装phpno1/architecture并发布配置 composer require phpno1/architecture php artisan vendor:publish --provider Phpno1\Architecture\Providers\ArchitectureServiceProvider如有需要可以修改config/architecture.php中的配置 注册到服务容器 # 在config/app.php中providers [// ......App\Providers\ArchitectureServiceProvider::class,];如果你的laravel或php版本比较高可能有部分辅助函数已经没有了那么你需要添加自定义函数去代替它们例如在app/Helpers/functions.php添加下面的辅助函数 ?php /*** 自定义 ends_with 函数* param $haystack* param $needle* return bool*/ function ends_with($haystack, $needle) {return str_ends_with($haystack, $needle); }/*** 下划线转驼峰命名法* param $string* return string*/ function camel_case($string){$parts explode(_, $string);foreach ($parts as $index $part) {$parts[$index] ucfirst($part);}$camelCaseString lcfirst(implode(, $parts));return $camelCaseString; }/*** 驼峰命名法转下划线命名法* param $string* return string*/ function snake_case($string) {// 使用正则表达式将字符串转换为小写并将非单词字符替换为下划线$snake strtolower(preg_replace(/[^A-Za-z0-9-]/, _, $string));// 去除开头和结尾的下划线$snake trim($snake, _);return $snake; } 然后修改文件composer.json在autoload节点添加自定义函数文件 autoload: {psr-4: {App\\: app/,Database\\Factories\\: database/factories/,Database\\Seeders\\: database/seeders/},files: [app/Helpers/functions.php]},最后执行composer dump-autoload使其生效即可 开发示例 以用户注册流程为例 统一响应 这里为了统一响应格式直接用第三方封装的响应数据包具体用法参考官方文档 laravel-response: Provide a standardized and unified response data format for Laravel and Lumen API projects. - 为 Laravel 和 Lumen API 项目提供一个规范统一的响应数据格式。 (gitee.com) 示例 Response::fail(); Response::ok(); Response::success([]);控制器 创建控制器 php artisan make:controller UserController控制器校验请求后调用不同 service 进行业务处理调用 API Resource 转换资源数据返回示例 ?phpnamespace App\Http\Controllers;use App\Http\Requests\UserRequest; use App\Services\SmsService; use App\Services\UserService; use Jiannei\Response\Laravel\Support\Facades\Response;class UserController extends Controller {private $userId; //用户idprivate $userService; //用户业务层public function __construct(UserService $userService){$this-userService $userService;$this-userId 1;}/*** 获取用户信息*/public function info(){return Response::success($this-userService-getUserInfo($this-userId));}/*** 注册* * param UserRequest $request* param SmsService $smsService* return \Illuminate\Http\JsonResponse|\Illuminate\Http\Resources\Json\JsonResource* throws \Illuminate\Auth\Access\AuthorizationException* throws \Illuminate\Validation\ValidationException*/public function register(UserRequest $request, SmsService $smsService){//参数验证$request-validate(register);//短信验证码验证if (!$smsService-check($request-mobile, register, $request-code)){return Response::fail(验证码错误);}try{//新增用户$this-userService-addUser($request-all());//绑定推荐人...//其他服务操作...return Response::ok();}catch (\Exception $e){return Response::fail($e-getMessage());}} }重点事项 将注入的Illuminate\Http\Request换成自定义的FormRequest 验证器 创建基础验证器 php artisan make:request BaseRequest创建的验证器在app/Http/Requests/BaseRequest.php 然后修改其内容为 ?phpnamespace App\Http\Requests;use Illuminate\Foundation\Http\FormRequest; use Illuminate\Http\Exceptions\HttpResponseException; use Illuminate\Contracts\Validation\Validator;/*** 基础验证器* Class AbstractRequest* package App\Http\Requests*/ class BaseRequest extends FormRequest {public $scenes []; //场景集合public $currentScene; //当前场景public $autoValidate false; //是否注入之后自动验证public function authorize(){return true;}/*** 设置场景* param $scene* return $this*/public function scene($scene){$this-currentScene $scene;return $this;}/*** 覆盖自动验证方法*/public function validateResolved(){if ($this-autoValidate) {$this-handleValidate();}}/*** 验证方法* param string $scene* throws \Illuminate\Auth\Access\AuthorizationException* throws \Illuminate\Validation\ValidationException*/public function validate($scene ){if ($scene) {$this-currentScene $scene;}$this-handleValidate();}/*** 根据场景获取规则* return array|mixed*/public function getRules(){$rules $this-container-call([$this, rules]);$newRules [];if ($this-currentScene isset($this-scenes[$this-currentScene])) {$sceneFields is_array($this-scenes[$this-currentScene])? $this-scenes[$this-currentScene] : explode(,, $this-scenes[$this-currentScene]);foreach ($sceneFields as $field) {if (array_key_exists($field, $rules)) {$newRules[$field] $rules[$field];}}return $newRules;}return $rules;}/*** 覆盖设置 自定义验证器* param $factory* return mixed*/public function validator($factory){return $factory-make($this-validationData(), $this-getRules(),$this-messages(), $this-attributes());}/*** 最终验证方法* throws \Illuminate\Auth\Access\AuthorizationException* throws \Illuminate\Validation\ValidationException*/protected function handleValidate(){$instance $this-getValidatorInstance();if ($instance-fails()) {$this-failedValidation($instance);}$this-passedValidation();}/*** 重写验证失败返回*/protected function failedValidation(Validator $validator){$error $validator-errors()-all();throw new HttpResponseException(response()-json([code 505, msg $error[0], data []]));} }接下来创建其他验证器的时候继承BaseRequest就可以了比如创建一个UserRequest php artisan make:request UserRequest然后修改其内容为 ?phpnamespace App\Http\Requests;/*** 用户模块验证*/ class UserRequest extends BaseRequest {/*** Determine if the user is authorized to make this request.** return bool*/public function authorize(){return true;}/*** 验证规则* Get the validation rules that apply to the request.** return array*/public function rules(){return [mobile required|regex:/^1[3-9]\d{9}$/,password required|min:6,];}/*** 验证字段* Get custom attributes for validator errors.** return array*/public function attributes(){return [mobile 手机号码,password 登录密码];}/*** 自定义提示信息* Get custom messages for validator errors.** return array*/public function messages(){return [*.required :attribute不能为空,*.regex :attribute格式不正确,*.min :attribute不能少于6位,];}/*** 定义验证场景和对应的验证字段*/public $scenes [//注册register [mobile,password],//登录login [mobile,password],]; }服务 创建服务 php artisan phpno1:service User上面的命令会生成app/Services/UserService.php他会自动绑定对应的仓库App\Repository\Contracts\UserRepository ?phpnamespace App\Services;use App\Repository\Contracts\UserRepository;class UserService {/*** var UserRepositoryEloquent*/protected $userRepository;public function __construct(UserRepository $userRepository){$this-userRepository $userRepository;}/*** 添加用户*/public function addUser($data){$this-userRepository-create($data);}/*** 查找用户* param $id* return \Illuminate\Database\Eloquent\Builder*/public function getUserInfo($id){return $this-userRepository-find($id);} }仓库 创建仓库 php artisan phpno1:repository User执行命令之后会生成app/Repository/Contracts/UserRepository.php和app/Repository/Eloquent/UserRepositoryEloquent.php我们平时写数据库查询逻辑在UserRepositoryEloquent中写就可以了 模型 创建模型 php artisan make:model User模型里面只保留默认的表属性和关联绑定方法即可不处理业务 ?phpnamespace App\Models;use App\Traits\SerializeDate; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Laravel\Sanctum\HasApiTokens;class User extends Authenticatable {use HasApiTokens, HasFactory, Notifiable, serializeDate;/*** The attributes that are mass assignable.** var arrayint, string*/protected $fillable [name,mobile,password,];/*** The attributes that should be hidden for serialization.** var arrayint, string*/protected $hidden [password,updated_at,remember_token,email_verified_at,];/*** The attributes that should be cast.** var arraystring, string*/protected $casts []; }
http://www.zqtcl.cn/news/947732/

相关文章:

  • 站长源码之家Wordpress 新建标签
  • 太原网站建设详细策划如何建设网站简答题
  • 乡村生态旅游网站建设方案如何做网站的导航栏
  • wordpress百度百科网站开发 seo
  • 网站主机名wordpress主题修改底部版权
  • 网站官网怎么做龙岩iot开发福建小程序建设
  • 哪个学校设有网站开发专业北京有哪些网站公司
  • 做网站需要的带宽上行还是下行湖南竞网科技有限公司
  • 帝国cms企业门户网站仿站视频教程 网盘互联网金融p2p网站建设
  • 个人网站备案涉及支付宝做二手的网站都有哪些
  • 如何给网站做宣传导航栏网页怎么制作
  • 返利网站建设高校精神文明建设网站
  • 河北百度推广seoseo全网优化指南
  • 网站建设网页开发一个类引用另一个类的方法
  • 第四章第二节网站建设的教学设计云南网站建设一度科技公司
  • php 搭建手机网站建e网app下载
  • 河北手机版建站系统价格微信怎么开店铺小程序
  • 中国建设教育网官网是什么网站潮州seo建站
  • 如何做个购物网站学校网站设计的目的
  • 建设部网站158号文件1688官网app
  • 临沂科技网站建设在线网页截图工具
  • 聊城网站推广软件简单网页制作训练
  • wordpress去除文章作者seo核心技术排名
  • 网站建设黄页免费观看wordpress所有文章
  • 企业整站优化沈阳建设学院
  • 网站怎么做弹框河北省建设注册中心网站首页
  • 大连哪里有手机自适应网站建设网站开发层次
  • 网站首页的浮窗怎么做美食网站程序
  • 淮北网站建设建设银行福州分行招聘网站
  • c 网站开发 pdf济南集团网站建设报价