macOS搭建php环境以及调试Symfony

news2024/11/26 2:23:49

macOS搭建php环境以及调试Symfony

  • macOS搭建php环境以及调试Symfony
    • 古老的传说
    • 运行环境
    • 快速前置安装环境
      • php 的安装
      • 安装 Xdebug 来调试 php
      • 如何找到你的 php.ini
      • Xdebug 安装成功
    • 创建并调试的 Hello world
      • 安装 PHP Debug
    • 安装 Symfony
      • 安装 Composer
      • 安装 Symfony CLI
    • 创建 Symfony App
    • 添加路由
    • 调试路由
    • 结尾

古老的传说

神说:要有光,于是世界就有了光。

神说:要有语言,于是世界就有了php

在世界上下 5000 年的历史长河中,

有这么一句古话镌刻在我们全人类心中:

“php是世界上最好的语言”

运行环境

最近,我,一名 Nodejs Developer, 出于来 php 生态取取经这个目的,我开始学习 php 框架 Symfony

而且我也喜欢 Symphony 这首歌,于是一边写代码写这篇文章,一边开始了我的 Clean Bandit 循环。

本文的运行环境如下:

  • macOS 14.3.1
  • vscode 1.87.2

除此之外不需要安装其他任何软件 (比如: XAMPP,Laragon)

快速前置安装环境

php 经过这么多年的发展,早就已经非常的成熟了。所以安装调试它非常的简单。

php 的安装

首先去 php.net 按照 macOS 系统下的安装文档 安装一下 php

记得先安装 homebrew : https://brew.sh/

brew install php

安装就好了, php -v 一下,出现以下信息:

PHP 8.3.4 (cli) (built: Mar 12 2024 23:42:26) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.4, Copyright (c) Zend Technologies

安装 Xdebug 来调试 php

调试 php 需要 xdebug, 去 xdebug.org 按照教程安装一下

pecl install xdebug

安装好了之后,默认情况它会自己去修改你的 php 目录下的 php.ini 添加一行:

zend_extension="xdebug.so"

当然假如没有的话,你也可以手动去 php.ini 添加下这一行。

如何找到你的 php.ini

你可以通过 php --ini 命令找到你文件的路径:

php --ini
# 然后展示你php的路径信息,类似下方
Configuration File (php.ini) Path: /opt/homebrew/etc/php/8.3
Loaded Configuration File:         /opt/homebrew/etc/php/8.3/php.ini
Scan for additional .ini files in: /opt/homebrew/etc/php/8.3/conf.d
Additional .ini files parsed:      /opt/homebrew/etc/php/8.3/conf.d/ext-opcache.ini

Xdebug 安装成功

此时假如 xdebug 安装注册成功的话, 执行 php -v 会额外出现信息:

PHP 8.3.4 (cli) (built: Mar 12 2024 23:42:26) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.3.4, Copyright (c) Zend Technologies
# 注意下一行 Xdebug
    with Xdebug v3.3.1, Copyright (c) 2002-2023, by Derick Rethans
    with Zend OPcache v8.3.4, Copyright (c), by Zend Technologies

创建并调试的 Hello world

随便在哪创建一个目录,在这打开 vscode 然后创建一个 test.php,内容如下:

<?php
$a = 0.1;
$b = 0.2;
$c = $a + $b;
$isEqual = $c == 0.3;
var_dump($isEqual);

$author = "'🧊 ice breaker 🧊'";
$cow = '\'Hello World\' from ';

$helloWorld = $cow . $author;

echo $helloWorld;

执行 php -f test.php 运行一下看看结果

安装 PHP Debug

然后安装 PHP Debug vscode 扩展:

Image

安装好了,就可以创建 .vscode/launch.json 并在其中添加,调试 php 的启动方式了。

我们在这个 json 文件的 configurations 字段中,随便输入个 php 就自动联想出来调试 php 的各种方式了, 比如下方这端就是插件自动生成的:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": "Launch currently open script",
      "type": "php",
      "request": "launch",
      "program": "${file}",
      "cwd": "${fileDirname}",
      "port": 0,
      "runtimeArgs": ["-dxdebug.start_with_request=yes"],
      "env": {
        "XDEBUG_MODE": "debug,develop",
        "XDEBUG_CONFIG": "client_port=${port}"
      }
    }
  ]
}

这个生成的调试命令的作用,点击 vscode debug 之后快速调试,你右边编辑器打开的 php 文件的。

我们打开 test.php 测试一下吧!

Image

命中断点!同时各位写 js 的同学,看到这个结果,不免会心一笑,弱类型解释型之殇哈哈。

不懂这个梗的,可以去浏览器的开发者工具控制台,执行一下 0.1 + 0.2

不过现在 php 是可以强类型的,只是我这里没有显式声明罢了。

这样就初步完成了调试 php 脚本的工作。

安装 Symfony

去 symfony.com 按照教程安装一下

我们已经安装好了 php 了,现在就只需要安装 ComposerSymfony CLI 就可以了

安装 Composer

Composer 是一个安装 php 包的工具,我就把它理解成 npm

来到 getcomposer.org 按照安装命令执行,就安装成功了

此时一个全局命令 composer 会被注册在你的 zsh,执行 composer --version 来看看是否安装成功吧!

composer --version
# 安装成功展示以下信息
Composer version 2.7.2 2024-03-11 17:12:18
PHP version 8.3.4 (/opt/homebrew/Cellar/php/8.3.4/bin/php)
Run the "diagnose" command to get more detailed diagnostics output.

我在有 composer.jsonphp 项目里执行 composer i,然后生成了 composer.lock 文件和 vendor, var 文件夹。

而你在有 package.jsonnodejs 项目里执行 npm i/yarn/pnpm i 不也是生成 lock 文件和 node_modules 文件夹吗?

不过 node_modules 是 “扭曲时间和立场的黑洞”,不知道 vendor 是不是,笑~

安装 Symfony CLI

同样使用 Homebrew:

brew install symfony-cli/tap/symfony-cli

安装完成之后执行:

symfony check:requirements

看到以下信息你就完成Symfony环境搭建的工作了!

Symfony Requirements Checker
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

> PHP is using the following php.ini file:
/opt/homebrew/etc/php/8.3/php.ini

> Checking Symfony requirements:

......................................


 [OK]
 Your system is ready to run Symfony projects


Note  The command console can use a different php.ini file
~~~~  than the one used by your web server.
      Please check that both the console and the web server
      are using the same PHP version and configuration.

创建 Symfony App

执行:

symfony new symfony-ms-demo --version="7.0.*"

创建了一个现代化的 symfony 应用,然后 cd & compose i 之后

执行 symfony server:start 开跑:

Image

访问对应页面出现:

Image

成功运行了,就是这么简单!

添加路由

按照教程在 src/Controller 添加一个 LuckyController.php:

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;

class LuckyController
{
  #[Route('/lucky/number')]
  public function number(): Response
  {
    $number = random_int(0, 100);

    return new Response(
      '<html><body>Lucky number: ' . $number . '</body></html>'
    );
  }
}

嗯,看代码是返回一个 html 字符串,这种代码实在是太常见了,各个语言的 web 框架不都是这样的吗?接口那种 CRUD 也不过是做点事情返回点 json/xml啥的,

什么概念比如 Middleware,Pipe 什么 Controller,Service, Guard, Interceptor, Decorator , Module ,Provider,Inject,IOC/DI …早已经了然于胸,不都是这些玩意,或者那些架构嘛…

说远了,我们注册了这个路由之后,访问 symfony server:start host 路由的 /lucky/number 地址,就是返回上面那个 html 片段了,但是我们应该怎么调试呢?

调试路由

实际上也很简单,同样使用 Xdebug 即可

我们同样在 .vscode/launch.json 添加一种启动方式: (输入 php 自动感应生成)

{
  "configurations": [
    {
      "name": "Launch Built-in web server",
      "type": "php",
      "request": "launch",
      "runtimeArgs": [
        "-dxdebug.mode=debug",
        "-dxdebug.start_with_request=yes",
        "-S",
        "localhost:0",
      ],
      "program": "",
      // 只需要设置下一行的 cwd,指向你 symfony 应用的入口 index.php 即可
      "cwd": "${workspaceRoot}/symfony-ms-demo/public",
      "port": 9003,
      "serverReadyAction": {
        "pattern": "Development Server \\(http://localhost:([0-9]+)\\) started",
        "uriFormat": "http://localhost:%s",
        "action": "openExternally",
      },
    },
  ],
}

然后在 vscode 里面直接启动,访问对应的路由即可命中断点:

Image

结尾

不知不觉就水了这么长的文章了,看都看累了

本文主要在讲如何在 vscode 里面运行和调试 php 以及 php web 框架 Symfony,算是基础中的基础了。

至于其他的软件, 比如 XAMPP,Laragon 啥的,我个人感觉是没有必要的,因为这种都可以使用 Docker 作为代替,切换 php 版本不过也只是拉不同的 php 版本镜像拉下来,在容器里去进行开发和运行罢了。

不过随着开发的深入,我感觉 XAMPP,Laragon 啥的这种还是有必要的。

因为我内存不够用了!!!

所以奉劝各位,买 Macbook Pro 的时候,一定要买大点的内存,尤其是你要本地跑容器的,推荐 36GB 起。(不过苹果内存真的是贵啊)

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

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

相关文章

vue系统——v-html

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>v-html指令</title> </head> <body&…

微信小程序备案流程详细操作指南

自2023年9月1日起&#xff0c;所有新上架的微信小程序均需事先完成备案手续&#xff0c;方能成功上线。而对于已经上架的存量小程序&#xff0c;也需要在2024年3月31日前完成备案工作。若在规定时间内未完成备案&#xff0c;平台将依据备案相关规定&#xff0c;自2024年4月1日起…

大语言模型---强化学习

本文章参考&#xff0c;原文链接&#xff1a;https://blog.csdn.net/qq_35812205/article/details/133563158 SFT使用交叉熵损失函数&#xff0c;目标是调整参数使模型输出与标准答案一致&#xff0c;不能从整体把控output质量 RLHF&#xff08;分为奖励模型训练、近端策略优化…

java数组与集合框架(二)-- 集合框架,Iterator迭代器,list

集合框架&#xff1a; 用于存储数据的容器。 Java 集合框架概述 一方面&#xff0c;面向对象语言对事物的体现都是以对象的形式&#xff0c;为了方便对多个对象的操作&#xff0c;就要对对象进行存储。另一方面&#xff0c;使用Array存储对象方面具有一些弊端&#xff0c;而…

小狐狸ChatGPT付费AI创作系统V2.8.0独立版 + H5端 + 小程序前端

狐狸GPT付费体验系统的开发基于国外很火的ChatGPT&#xff0c;这是一种基于人工智能技术的问答系统&#xff0c;可以实现智能回答用户提出的问题。相比传统的问答系统&#xff0c;ChatGPT可以更加准确地理解用户的意图&#xff0c;提供更加精准的答案。同时&#xff0c;小狐狸G…

09_Web组件

文章目录 Web组件Listener监听器ServletContextListener执行过程 Filter过滤器Filter与Servlet的执行 案例&#xff08;登录案例&#xff09; 小结Web组件 Web组件 JavaEE的Web组件&#xff08;三大Web组件&#xff09;&#xff1a; Servlet → 处理请求对应的业务Listener →…

图论做题笔记:dfs

Leetcode - 797&#xff1a;所有可能的路径 题目&#xff1a; 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从节点 i 可以访问的所有节…

公司官网怎么才会被百度收录

在互联网时代&#xff0c;公司官网是企业展示自身形象、产品与服务的重要窗口。然而&#xff0c;即使拥有精美的官网&#xff0c;如果不被搜索引擎收录&#xff0c;就无法被用户发现。本文将介绍公司官网如何被百度收录的一些方法和步骤。 1. 创建和提交网站地图 创建网站地图…

el-select的错误提示不生效、el-select验证失灵、el-select的blur规则失灵

发现问题 在使用el-select进行表单验证的时候&#xff0c;发现点击下拉列表没选的情况下&#xff0c;他不会提示没有选择选项的信息&#xff0c;我设置了rule如下 <!--el-select--><el-form-item label"等级" prop"level"><el-select v-m…

代码随想录算法训练营Day39|LC62 不同路径LC63 不同路径II

一句话总结&#xff1a;不是太难&#xff0c;状态转移方程好想。 原题链接&#xff1a;62 不同路径 位置为(i, j)的点只能从上面或者左边过来&#xff0c;由此可列出状态转移方程。状态转移方程的初始化为所有第一排和第一列的点都初始化为1即可。 class Solution {public i…

MATLAB 点云高程渲染赋色(50)

MATLAB 点云高程渲染赋色(50) 一、算法介绍二、算法实现1.步骤2.代码3.效果一、算法介绍 自己写的高程渲染算法,点云的渲染效果更接近软件中的效果,具体的算法步骤和实现代码,以及最后的实现效果如下所示: 二、算法实现 1.步骤 1 首先读取了原始的点云数据 CSDN.ply…

【御控物联】JavaScript JSON结构转换(12):对象To数组——键值互换

文章目录 一、JSON结构转换是什么&#xff1f;二、核心构件之转换映射三、案例之《JSON对象 To JSON数组》四、代码实现五、在线转换工具六、技术资料 一、JSON结构转换是什么&#xff1f; JSON结构转换指的是将一个JSON对象或JSON数组按照一定规则进行重组、筛选、映射或转换…

Adobe Illustrator 2023 for Mac/Win:创意无限,设计无界

在数字艺术与设计领域&#xff0c;Adobe Illustrator 2023无疑是一颗璀璨的明星。这款专为Mac和Windows用户打造的矢量图形设计软件&#xff0c;以其强大的功能和卓越的性能&#xff0c;赢得了全球设计师的广泛赞誉。 Adobe Illustrator 2023在继承前代版本优点的基础上&#…

【DETR系列目标检测算法代码精讲】01 DETR算法01 DETR算法框架和网络结构介绍

为什么要有DETR 总所周知&#xff0c;传统的目标检测算法非常依赖于anchor和nms等手工设计操作&#xff0c;非常费时费力&#xff0c;自然而然的就产生了取消这些操作的想法。但是我们首先需要思考的是&#xff0c;为什么我们需要anchor和nms&#xff1f; 因为我们是没有指定…

正大国际:期货入门的基础知识是什么?

期货的概念很简单&#xff0c;就是一种远期合同&#xff0c;买卖双方约定交易物、交易价格与交易时间。难就难在如何理解它具备的杠杆率&#xff0c;人们是如何在这上面暴富或破产的 很多人抱有这么个错觉&#xff0c;觉得期货是一个小众市场。但其实&#xff0c;世界上所发生…

P-MapNet:Far-seeing Map Generator Enhanced by both SDMap and HDMap Priors

主页&#xff1a;homepage 参考代码&#xff1a;P-MapNet 动机与出发点 在感知系统中引入先验信息是可以提升静态元素感知网络的上限的&#xff0c;这篇文章对SD地图采用栅格化表示&#xff08;也就是图像形式&#xff09;&#xff0c;之后用CNN网络去抽取栅格化SD地图的信息&…

软件测试面试——你准备好了吗?

软件的生命周期 计划阶段-〉需求分析-〉设计阶段-〉编码->测试->运行与维护 测试用例&#xff1a;用例ID&#xff0c;测试项&#xff0c;重要级别&#xff0c;优先级别&#xff0c;预置条件&#xff0c;测试标题&#xff0c;操作步骤&#xff0c;预期结果。&#xff08…

Mybatis (1)

mybatis 1、入门2、事务管理机制3、日志和junit配置3、mybatis工具类4、CRUD4.1 insert4.1.1 map方式4.1.2 对象方式 4.2 delete4.3 update4.4 select&#xff08;Retrieve&#xff09;4.4.1 查询一个结果4.4.2 查询多个结果 4.5 命名空间 1、入门 ①创建一个空项目&#xff1…

java电话号码的字母组合(力扣Leetcode17)

电话号码的字母组合 力扣原题链接 问题描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 示例 1&#xff1a;…

理解游戏服务器架构-部署架构

目录 前言 我所理解的服务器架构 什么是否部署架构 部署架构的职责 进程业务职责 网络链接及通讯方式 与客户端的连接方式 服务器之间连接关系 数据落地以及一致性 数据库的选择 数据访问三级缓存 数据分片 读写分离 分布式数据处理 负载均衡 热更新 配置更新 …