laravel_进程门面_简单介绍

文章目录

  • Facade是什么?
  • Facade能干什么
  • Facade有哪些方法?
  • 怎么使用Facade呢?
  • 详细的代码解释
  • Symfony Process是什么?
  • 介绍Symfony
  • 总结

Facade是什么?

在 Laravel 框架中,Facade 是一种设计模式。

它提供了一种简洁、静态的接口来访问应用程序容器中的底层类

Facade充当了底层类的一个「静态代理」

这意味着你可以通过静态方法调用容器中的服务,而无需手动解析实例化这些服务。

在 Laravel 中,Process Facade 对应的底层类是 Illuminate\Console\Process

但通过使用 Facade,你无需直接关心这个底层的实现细节。

Facade能干什么

具体到 Process Facade,它是 Laravel 提供的一个门面,用于简化与外部进程交互的过程

通过使用 Process Facade,你可以方便地启动和管理系统进程,而无需直接使用 PHP 的 proc_openproc_close 等底层函数。


Facade有哪些方法?

Process Facade 提供了一系列静态方法,允许你创建和管理进程,例如:

  • command($command, $options = []):
    • 运行一个外部命令、并返回一个 Symfony\Component\Process\Process 实例。
  • mustRun($command, $options = [], &$output = null):
    • 运行一个命令,并确保它成功执行。
    • 如果命令执行失败,将抛出一个异常。
  • fromShellCommandline($command, $cwd = null, array $env = null, array $input = null, int &$exitcode = null):
    • 创建一个新的 Process 实例。
    • 该实例从 shell 命令行中解析命令。

怎么使用Facade呢?

在 Laravel 中使用 Process Facade 非常简单,

你只需要在代码文件的开头引入它,然后就可以使用其提供的静态方法来操作进程了。

例如:

use Illuminate\Support\Facades\Process;$process = Process::fromShellCommandline('ls -lart');$process->run();// 获取输出信息
$output = $process->getOutput();// 获取退出码
$exitCode = $process->getExitCode();

使用 Facade 的好处在于它提供了简洁的语法,并且使得代码更加易于阅读和维护。

同时,Facade 还使得底层类的实现、可以更容易地进行替换或修改,而无需修改使用这些类的代码

详细的代码解释

// 引入 Laravel 的 Process 门面
// 它提供了对底层进程处理类的静态访问方式。
use Illuminate\Support\Facades\Process;// 使用 Process 门面的 fromShellCommandline 静态方法
// 创建一个新的进程实例。
// 
// 该方法接受一个 shell 命令(在这个例子中是 'ls -lart'),并返回一个 Process 实例。
// 
// 'ls -lart' 是一个在 Unix 和类 Unix 系统
// (如 Linux)中常见的命令,
// 用于列出当前目录下的所有文件和文件夹,
// 显示详细信息(包括权限、所有者、大小等),
// 并按文件修改时间降序排列。
$process = Process::fromShellCommandline('ls -lart');// 调用 Process 实例的 run 方法来
// 执行之前通过 fromShellCommandline 方法设置的命令。
// 
// 这个方法会阻塞当前 PHP 进程,直到 shell 命令执行完成。
$process->run();// 在命令执行完成后,使用 Process 实例的 getOutput 方法来获取命令的输出。
// 
// 这个输出通常是一个字符串,包含了命令执行后在标准输出(stdout)上打印的所有内容。
// 这里将这个输出存储在 $output 变量中。
$output = $process->getOutput();// 使用 Process 实例的 getExitCode 方法来获取命令执行后的退出码。
// 
// 退出码是一个整数,通常用于表示命令执行的成功与否。
// 按照惯例,退出码为 0 表示成功,非零值表示出现了某种错误。
// 这里将这个退出码存储在 $exitCode 变量中。
$exitCode = $process->getExitCode();

到这里是不是就理解了,原来可以使用laravel去执行shell命令等等东西。

原来是这种用途的呀。

真是有意思,有意思。

Symfony Process是什么?

在 Laravel 中,Process 门面实际上是对 Symfony Process 组件的一个封装。

Symfony Process 组件提供了一套丰富的 API 来处理 PHP 与外部进程的交互,

包括运行命令、获取输出、处理错误、等待进程结束等。

Laravel 通过引入这个组件,并以门面的形式提供静态访问接口,

简化了在 Laravel 应用程序中执行外部命令和处理进程输出的过程。

需要注意的是,虽然上面的代码展示了如何使用 Process 门面来执行一个简单的 shell 命令并获取其输出和退出码,

但在实际的生产环境中,执行外部命令可能会带来安全风险,

特别是当命令的内容来自不可信的来源时。

因此,在使用 Process 门面或类似的工具时,应确保仔细验证和过滤输入,以防止命令注入等安全漏洞

介绍Symfony

在法语中,“symfony”是一个复数形式,意为“和谐”或“和谐的声音”。


Symfony是一款免费开源的网页框架,与一组可PHP重用的开发组件资源程序库。

在MIT License许可下发行。

2005年10月18日,其官方网站symfony-project.com对外开放。

这TM都快20年了,真实不简单呀。

Symfony致力于减少重复代码的编写,以加速Web应用的开发和维护。

Symfony与许多关系型数据库集成的也非常好,成本也较小。

Symfony致力于在企业背景下创建健壮的应用,同时也给予了开发者强大的配置功能:

文件结构外部目录,几乎所有的东西都可以自定义。

Symfony也捆绑了一些诸如测试调试文档生成额外的工具来满足企业的开发过程。


Symfony 受到了 Spring Framework 的启发。

它使用了以下一些PHP开源项目的部分功能。

  • Propel (PHP) 或 Doctrine (PHP):用作对象关系映射(ORM)

  • PDO 数据库抽象层

  • PHPUnit: 单元测试框架

  • Twig:用作模板引擎


Symfony 也使用自己创作的组件,这些组件可以在Symfony组件网站上免费获得,用于其他各种项目:

  • Symfony YAML, 一个 YAML 转译器

  • Symfony Event Dispatcher

  • Symfony Dependency Injector, 依赖注入器

  • Symfony Templating, 页面板块引擎


Sensio是Symfony的赞助商,它是一家法国Web代理商。

起先Symfony使用Sensio Framework作为该项目的名字,

因此代码中所有的类名前都加上了"sf"前缀。

当它决定以开源形式发布时,便以Symfony作为名称(Symfony的英文缩写也是sf)。

这个东西原来是有法国背景的,难怪的。


一款开源的Q&A服务Askeet就是使用Symfony开发的。

包括拥有2000万用户的Yahoo Bookmarks,也是使用Symfony开发的。

Yahoo Bookmarks,也被称为“雅虎书签”,是一种网络存储服务。

使用户能够从任何联网的电脑上访问他们的书签。

这种服务提供了两种方式来组织书签:

文件夹方式(Use Folders)标签方式(Use Tags)

同时,用户可以选择三种方式来查看他们的书签:全方式列表式图标式


网站地址是:https://symfony.com/

这个东西现在还在更新的,具体的版本情况看下面的图片:

总结

laravel框架当中使用了symfony process组件,并且使用Facade来简化操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/684827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

476. Number Complement(数字的补数)

问题描述 对整数的二进制表示取反(0 变 1 ,1 变 0)后,再转换为十进制表示,可以得到这个整数的补数。 例如,整数 5 的二进制表示是 “101” ,取反后得到 “010” ,再转回十进制表示…

java8默认方法

口什么是默认方法 口如何以一种兼容的方式改进API 口默认方法的使用模式 口 解析规则 传统上,Java程序的接口是将相关方法按照约定组合到一起的方式。实现接口的类必须为接口中定义的每个方法提供一个实现,或者从父类中继承它的实现。但是,一…

NLP_Transformer架构

文章目录 Transformer架构剖析编码器-解码器架构各种注意力的应用Transformer中的自注意力Transformer中的多头自注意力Transformer中的编码器-解码器注意力Transformer中的注意力掩码和因果注意力 编码器的输入和位置编码编码器的内部结构编码器的输出和编码器-解码器的连接解…

计网物理层

通信基础 基本概念 物理层解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是指具体的传输媒体。 其主要任务是确定与传输媒体接口有关的一些特性,即定义标准。 机械特性:定义物理连接的特性,规定物理连接时所采用的…

模型 4R(关联、反应、关系、回报)理论

系列文章 分享 模型,了解更多👉 模型_总纲目录。重在提升认知。以关系促营销。 1 4R(关联、反应、关系、回报)理论的应用 1.1 4R模型在小米客户关系管理中的应用 小米公司是一家以生产智能手机和消费电子产品而闻名的公司,它在客户关系管理…

VMware Workstation 17.0 虚拟机安装MS-DOS 7.1完整详细步骤图文教程

VMware Workstation 17.0 虚拟机安装MS-DOS 7.1完整详细步骤图文教程 一、配置MS-DOS虚拟机机器环境二、安装MS-DOS磁盘操作系统 一、配置MS-DOS虚拟机机器环境 1.打开VMware Workstation Pro 2.新建虚拟机 3.建议选择【典型】,之后点击【下一步】 关于【自定义…

在spring中操作Redis

目录 创建项目 ​编辑 配置Redis 创建类 StringRedisTemplate set / get list set Hash zset 新年快乐!!!! 创建项目 选中maven项目,然后选择java8,输入名称之后,点击next。 随后选择…

C++多重继承

C多重继承 C中的多重继承是指一个类可以从多于一个的基类派生出来,这允许在一个派生类中继承多个基类的特性和行为。多重继承增加了C的灵活性和表达能力,但同时也带来了一些复杂性,如菱形继承问题和潜在的命名冲突。 基本用法 定义一个多重…

C++中类的6个默认成员函数 【拷贝构造函数】

文章目录 拷贝构造函数的使用拷贝构造对于自定义类型【浅拷贝】深拷贝拷贝构造函数典型调用场景 拷贝构造函数的使用 在前几章学习对象的时候,我们有的时候需要一个与已存在对象一某一样的新对象 那在创建对象时,可否创建一个与已存在对象一某一样的新对…

(02)Hive SQL编译成MapReduce任务的过程

目录 一、架构及组件介绍 1.1 Hive底层架构 1.2 Hive组件 1.3 Hive与Hadoop交互过程 二、Hive SQL 编译成MR任务的流程 2.1 HQL转换为MR源码整体流程介绍 2.2 程序入口—CliDriver 2.3 HQL编译成MR任务的详细过程—Driver 2.3.1 将HQL语句转换成AST抽象语法树 词法、语…

C# CAD SelectionFilter下TypedValue数组

SelectionFilter是用于过滤AutoCAD实体的类,在AutoCAD中,可以使用它来选择具有特定属性的实体。构造SelectionFilter对象时,需要传入一个TypedValue数组,它用于定义选择规则。 在TypedValue数组中,每个元素表示一个选…

VScode中配置 C/C++ 环境 | IT拯救者

文章目录 0 引言1. 下载编辑器VScode2. 下载编译器MinGW并解压3. 将MinGW添加至环境变量4. 配置VScode插件5. 运行代码6. 调整和优化7. 提示8. 例行格式条款9. 例行格式条款 0 引言 由于VScode毛毛张使用不习惯,因此配置教程记不住,不过毛毛张看到一篇不…

「递归算法」:两两交换链表中的节点

一、题目 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:head [1,2,3,4] 输出&#xf…

计算机二级数据库之数据模型(三层相关的结构)

数据模型 模型的概念 模型的介绍模型是对现实世界特征的模拟和抽象, 数据模型的概念: 数据模型是对现实世界中数据特征的抽象,描述的是数据的共性。 数据模型是用来在数据库中抽象、表示和处理现实世界中的数据和信凹。 其相关的共同特…

论文阅读:《Deep Learning-Based Human Pose Estimation: A Survey》——Part 1:2D HPE

目录 人体姿态识别概述 论文框架 HPE分类 人体建模模型 二维单人姿态估计 回归方法 目前发展 优化 基于热图的方法 基于CNN的几个网络 利用身体结构信息提供构建HPE网络 视频序列中的人体姿态估计 2D多人姿态识别 方法 自上而下 自下而上 2D HPE 总结 数据集…

Python二级考试笔记

Python二级考试笔记【源源老师】 01. 字符串 1. 常规功能合集 字符串本身有一些功能,有些之前运用过,这里总结如下: # 功能一:判断字符串类型 print(type("Hello")) print(str(123)) # 转换# 功能二:连…

相机图像质量研究(27)常见问题总结:补光灯以及遮光罩对成像的影响--遮光罩

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

[AIGC] 消息积压了,该如何处理?

在构建分布式系统时,开发人员经常会遇到消息积压的问题。当系统的处理能力不足时,消息会在队列中积压,导致系统 slowed down 或 even crashed。为了解决这个问题,我们需要采取一些措施来缓解消息积压。 文章目录 什么是消息积压&…

MyBatis篇----第七篇

系列文章目录 文章目录 系列文章目录前言一、简述 Mybatis 的插件运行原理,以及如何编写一个插件。二、MyBatis实现一对一有几种方式?具体怎么操作的 ?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男…

GoJS可视化JavaScript库讲解

1.简介 GoJS是一个可视化JavaScript库,用于浏览器中创建交互图形,(比如流程图,树图,关系图,力导图等等)。允许您为用户构建各种图表,从简单的流程图、组织图到图表、SCADA和BPMN图表…