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.hqwc.cn/news/472098.html

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

相关文章

杨中科 .netcore 依赖注入

1.概念 概念 生活中的“控制反转”:自己发电和用电网的电。 依赖注入(Dependency Injection,Dl)是控制反转:(Inversion of Control,l0c)思想的实现方式。 依赖注入简化模块的组装过程,降低模块之间的耦合度 自己发电的代码 var connSetti…

炬芯ATS2819 soundbar音响系统开发完全手册

加我微信hezkz17,可申请加入数字音频系统研究开发交流答疑群,赠送音频项目核心开发资料 ATS2819音响系统开发完全手册 1 硬件原理实现 图1 硬件原理框图 2 SOC ATS2819介绍 3 E800 板子项目实物…

基于BP算法的SAR成像matlab仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 4.1 BP算法的基本原理 4.2 BP算法的优点与局限性 5.完整工程文件 1.课题概述 基于BP算法的SAR成像。合成孔径雷达(SAR)是一种高分辨率的雷达系统,能够在各种天气和光…

Tcl 过程

一个Tcl过程就是Tcl脚本定义的一个命令。可以使用proc命令定义新的过程。Tcl还提供了处理变量作用域的特殊命令,这些命令允许使用引用而非值传递参数,并能把新的Tcl控制结构实现为过程。 一、proc与return 过程由proc命令创建, 其中参数{a b} 中的大括…

leetcode hot100爬楼梯

在本题目中,要求爬第n阶有多少种爬法,并且每次只能爬1个或者2个,这明显是动态规划的问题,我们需要用动态规划的解决方式去处理问题。动态规划就是按照正常的顺序由前向后依次推导。而递归则是从结果往前去寻找(个人理解…

用HTML、CSS和JS打造绚丽的雪花飘落效果

目录 一、程序代码 二、代码原理 三、运行效果 一、程序代码 <!DOCTYPE html> <html><head><meta http-equiv"Content-Type" content"text/html; charsetGBK"><style>* {margin: 0;padding: 0;}#box {width: 100vw;heig…

HC05蓝牙模块

简介 HC-05 蓝牙串口通信模块&#xff0c;是基于 Bluetooth Specification V2.0 带 EDR 蓝牙协议的 数传模块。无线工作频段为 2.4GHz ISM&#xff0c;调制方式是 GFSK。模块最大发射功率为 4dBm&#xff0c;接收灵敏度-85dBm&#xff0c;板载 PCB 天线&#xff0c;可以实现 1…

Kotlin基础——类、对象和接口

文章目录 1 定义类继承结构1.1 接口1.1.1 接口概述1.1.2 接口中的默认方法1.1.3 接口方法重复1.1.4 Kotlin接口中静态方法实现原理 1.2 修饰符1.2.1 类继承修饰1.2.2 方法重写修饰1.2.3 抽象类1.2.4 接口的修饰符 1.3 可见性修饰符1.3.1 Kotlin中的可见性修饰符1.3.2 Kotlin中的…

蓝桥杯真题:扑克牌移动

import java.util.*; public class Main {public static List moveCard(List src){if(srcnull) return null;List dst new Vector();for(;;){if(src.size()0) break; // 填空src.add(src.remove(0));//remove(0) 是一个 List 接口中的方法调用&#xff0c;它表示移除列表中指…

【VSCode】使用笔记

目录 快捷键系列 相关插件 相关文档链接 快捷键系列 调出终端 ctrl 或者是ctrlJ 结束进程 ctrlc 注释 ctrlkc 取消注释 ctrlku 上下移动代码 alt方向键 多行光标ctrlalt方向键 快速跳过某个单词 ctrl方向键 相关插件 1.每次修改后&#xff0c;自动保存启动项目 相…

selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘

Selenium更新到 4.x版本后&#xff0c;以前的一些常用的代码的语法发生了改变 from selenium import webdriver browser webdriver.Chrome() browser.get(https://www.baidu.com) input browser.find_element_by_id(By.ID,kw) input.send_keys(Python)目标&#xff1a;希望通…

解决vitepress首次加载慢(从40秒到1秒的倔强)

前言&#xff1a;在艰难的博客系统升级之路 这篇博客中我有提到vitepress首次加载非常耗时的问题&#xff0c;之前也在网上搜索时发现也有很多人说这个“问题”&#xff0c;但是在折腾了这么一段时间后&#xff0c;发现这也许本身不是vitepress的问题&#xff0c;而是我的启动方…