09 2020 档案
摘要:Nginx的配置文件 Nginx的配置文件放在/etc/nginx路径之下,运行ls -l /etc/nginx 输出 主配置文件nginx.conf详细说明 #运行用户 user nginx; #进程数目,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志 err
阅读全文
摘要:一、先把源代码安装起来,结合它的文档和手册,熟悉其功能和它的应用方式。 二、浏览源代码的目录结构,了解各个目录的功能。 三、经过以上两步后相信你对这个开源的产品有了一个初步的了解了,那现在就开始分析它的源码吧。这一步我们开始分析源代码框架。例如入口方式是单入口还是多入口,页面之间的调用规则,能根据规
阅读全文
摘要:安装 注意 当前版本(1.5)需要安装PHP 7+和Laravel 5.5 首先确保安装好了laravel,并且数据库连接设置正确。 composer require encore/laravel-admin 然后运行下面的命令来发布资源: php artisan vendor:publish --
阅读全文
摘要:安装 下载扩展包 composer require encore/laravel-admin 发布资源 php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider" 该命令生成 config/admin.php,可
阅读全文
摘要:关联查询 关于关联查询,我们在前面介绍关联关系定义的时候已经穿插着介绍过,这里简单回顾下。在 Eloquent 模型上进行关联查询主要分为两种方式,一种是懒惰式加载(动态属性),一种是渴求式加载(通过with方法)。从性能上来说,渴求式加载更优,因为它会提前从数据库一次性查询所有关联数据,而懒惰式加
阅读全文
摘要:Eloquent 模型支持的关联关系包括以下七种: 一对一 一对多 多对多 远层一对多 多态关联(一对一) 多态关联(一对多) 多态关联(多对多) 下面我们将以设计一个简单的博客系统数据库为例一一介绍上述关联关系。 一对一 建立关联关系 一对一是最简单的关联关系,一般可用于某张数据表的扩展表与主表之
阅读全文
摘要:所有支持的模型事件 在 Eloquent 模型类上进行查询、插入、更新、删除操作时,会触发相应的模型事件(关于事件我们后面会单独讲),不管你有没有监听它们。这些事件包括: retrieved:获取到模型实例后触发 creating:插入到数据库前触发 created:插入到数据库后触发 updati
阅读全文
摘要:概述 一个 Eloquent 模型类映射一张数据表,通过模型类提供的方法,你可以获取其映射的数据表的所有记录,也可以获取单条记录,还可以创建、更新和删除对应数据表记录,而这一切都不需要你编写任何 SQL 语句、或者构建查询构建器即可完成。 Eloquent 专注于简单,并且和其他框架一样遵循「约定优
阅读全文
摘要:使用 DB 门面执行原生 SQL 语句 原生 Statement 语句 我们可以通过 DB 门面提供的 statement 方法执行原生的 SQL Statement 语句,比如创建、删除、修改数据表操作: DB::statement('drop table `users`'); DB::state
阅读全文
摘要:定义迁移 数据表的每次变动(创建、修改、删除)都对应一个迁移文件,这些迁移文件位于 database/migrations 目录下,以日期时间为条件确定执行的先后顺序。每个迁移文件中包含一个迁移类,这个迁移类有两部分组成:负责执行数据库迁移的 up 方法,以及负责回滚此次迁移的 down 方法。 创
阅读全文
摘要:在 Web 应用中,用户提交的数据往往是不可预测的,因此一个非常常见的需求是对用户提交的表单请求进行验证,以确保用户输入的是我们所期望的数据格式。 作为一个灵活的框架,Laravel 提供了多种方式对表单请求进行验证,你可以在控制器中通过 $this->validate() 方法验证用户请求,也可以
阅读全文
摘要:注入请求对象 在 Laravel 中,访问用户输入数据最常用的方式,就是通过注入到控制器方法中的 Illuminate\Http\Request 对象实例,通过该实例,我们可以访问所有用户请求数据,不管是什么方式,什么格式: <?php namespace App\Http\Controllers;
阅读全文
摘要:Laravel 视图概述 在实际开发中,除了 API 路由返回指定格式数据对象外,大部分 Web 路由返回的都是视图,以便实现更加复杂的页面交互 return view('以.分隔的视图模板路径'); 视图是 MVC 模式中的 View 部分,大部分视图都应该是 HTML 格式文本,在 Larave
阅读全文
摘要:在浏览器地址栏访问某个 URL 采用的是 GET 请求,对于其他请求方式要怎么实现呢,一种方法是通过 HTML 表单元素的 method 属性,另一种方法是在 JavaScript 脚本中发起 HTTP 请求。对于 HTML 表单属性而言,有一个问题是 HTML 表单仅支持 GET 和 POST 请
阅读全文
摘要:控制器概述 在 MVC 模式中,M 代表模型(Model),V 代表视图(View),C 代表控制器(Controller),控制器负责组织路由和业务逻辑(当然,对于更加复杂的业务逻辑还会引入 Service 层),模型类负责底层数据存取与处理,而视图层负责数据渲染与页面交互。对于一些 CRUD 操
阅读全文
摘要:对任何一个 Web 应用框架而言,通过 HTTP 协议处理用户请求并返回响应都是核心必备功能,也就是说,对于我们学习和使用一个 Web 框架,第一件要做的事情就是定义应用路由,否则,将无法与终端用户进行交互。 路由入门 在 Laravel 应用中,定义路由有两个入口,一个是 routes/web.p
阅读全文
摘要:概念及使用 1、什么是组件 组件是一组打包的代码,是一系列相关的类、接口和Trait,用于帮助我们解决PHP应用中某个具体问题。例如,你的PHP应用需要收发HTTP请求,可以使用现成的组件如guzzle/guzzle实现。我们使用组件不是为了重新实现已经实现的功能,而是把更多时间花在实现项目的长远目
阅读全文
摘要:需要注意的是,调优 PHP 只是提升 PHP 性能和效率的举措,对拙劣的代码和无响应的 API 调用无计可施。 php.ini文件 PHP 解释器在 php.ini 文件中配置和调优,这个文件在不同操作系统中的位置有所不同,而且一般命令行对应的 php.ini 和 PHP-FPM 对应的 php.i
阅读全文
摘要:命名空间 1、什么是命名空间 命名空间的作用是封装和组织相关的PHP类,就像在文件系统中把相关的文件放在同一个目录中一样。PHP命名空间和操作系统的物理文件系统不同,这是一个虚拟概念,没必要和文件系统中的目录结构完全相同,虽然如此,但是大多数PHP组件为了兼容广泛使用的PSR-4自动加载标准,会把命
阅读全文
摘要:基本语法 常量 常量与变量相对,变量可以在运行期间修改,而常量一经定义就不能进行变更,因此常量存在的意义就是设置运行期「只读变量」,保护「这些变量」运行期间不被更改。 在 PHP 中定义常量有两种方式,通过 define 函数设置常量,以 const 修饰符的方式定义常量 通过 define 定义的
阅读全文
摘要:在第二篇文章中介绍了如何利用工作队列将耗时任务分发到多个消费者工作程序中。 考虑下另一种情况:如果需要在一个远程机器上执行一个函数然后等待它的返回结果应该怎样?这个过程称之为远程过程调用(RPC:Remote Procedure Call). 本篇将介绍如何利用RabbitMQ实现一个包含客户端和可
阅读全文
摘要:在上一篇文章中,我们对之前的日志系统进行了改进,使用direct类型的exchange替代了只能广播消息的fanout类型,让日志系统能够有选择性的接收处理消息。 虽然使用direct类型的exchange提升了日志系统的扩展性,但还是有它的局限性存在,那就是无法配置多重标准的路由。 如果想让系统不
阅读全文
摘要:在上一篇文章中,我们实现了一个可以广播消息给多个接收者的日志系统。在本篇中,将介绍如何对消息进行过滤,从而只处理我们感兴趣的消息。如只把一些严重的错误信息写入磁盘,但对所有类型的消息都打印到屏幕。 Binding 前面例子中我们使用了如下绑定: err = ch.QueueBind( q.Name,
阅读全文
摘要:在前一篇介绍中实现了一个工作队列,它假设队列中的每一个任务都只会被分发到一个工作者进行处理。在本篇中,我们尝试将同一个消息发送给多个消费者进行处理,这就是广为人知的发布/订阅模式。 本篇通过搭建一个日志系统来阐述发布/订阅模式,它包含两部分内容:一个用于产生日志消息的程序,另一个用于接收和打印消息。
阅读全文
摘要:在上一篇介绍中我们实现了从消息产生程序发送简单消息到命名队列的过程,本篇将实现一个将耗时任务分发到多个消费者程序的工作队列。 工作队列的主要思想是避免对资源密集型任务处理时的等待,而是先将任务压入队列,后期再进行计划处理。我们将任务封装成消息发送给队列,由队列程序按策略分发到所有的在线工作者程序执行
阅读全文