macOS搭建php环境以及调试Symfony

news/发布时间2024/5/19 15:26: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
# 注意下一行 Xdebugwith Xdebug v3.3.1, Copyright (c) 2002-2023, by Derick Rethanswith 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 projectsNote  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 serverare 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:

<?phpnamespace 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.bcls.cn/ixPf/33268.shtml

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

相关文章

基于Springboot旅游网站管理系统设计和实现

基于Springboot旅游网站管理系统设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系…

ssm013小型企业办公自动化系统的设计和开发+vue

小型企业办公自动化系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对小型企业办公信息管理混乱&am…

Linux系统----------探索mysql数据库MHA高可用

目录 一、MHA概述 1.1 什么是 MHA 1.2MHA 的组成 1.2.1MHA Node&#xff08;数据节点&#xff09; 1.2.2MHA Manager&#xff08;管理节点&#xff09; 1.3MHA 的特点 1.4MHA工作原理 1.5数据同步的方式 1.5.1同步复制 1.5.2异步复制 1.5.3半同步复制 二、搭建 MySQ…

时间管理系统的设计与实现|Springboot+ Mysql+Java+ B/S结构(可运行源码+数据库+设计文档)大学生

本项目包含可运行源码数据库LW&#xff0c;文末可获取本项目的所有资料。 推荐阅读300套最新项目持续更新中..... 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含ja…

简单工厂模式

1.1 面试受挫 package com.lhx.design.pattern.test;import java.util.Scanner;public class Test {public static void main(String[] args){System.out.println("**********************************************"); System.out.println("《大话设计模式》代…

一则关于Go的高级构建指北

本文将探索Golang高级构建技巧&#xff0c;从而有助于创建更高效的二进制文件。 构建选项 以下是 go build 命令最常用的一些选项&#xff1a; -o: 指定输出文件名。默认输出文件名是主软件包的名称&#xff0c;在 Windows 系统中会自动添加 .exe 后缀。-v: 详细输出。该选项…

docker--部署 (超详版) (五)

环境准备&#xff1a;docker&#xff0c;mysql&#xff0c;redis&#xff0c;镜像&#xff0c;nginx 把虚拟机打开&#xff0c;连接xshell&#xff0c;参考博客&#xff1a; https://blog.csdn.net/m0_74229802/article/details/136965820?spm1001.2014.3001.5501 一&#x…

神经网络:梯度下降法更新模型参数

作者&#xff1a;CSDN _养乐多_ 在神经网络领域&#xff0c;梯度下降是一种核心的优化算法&#xff0c;本文将介绍神经网络中梯度下降法更新参数的公式&#xff0c;并通过实例演示其在模型训练中的应用。通过本博客&#xff0c;读者将能够更好地理解深度学习中的优化算法和损…

JavaScript动态渲染页面爬取——Selenium的使用

JavaScript动态渲染页面爬取 JavaScript动态渲染得页面不止Ajax一种。例如&#xff0c;有些页面的分页部分由JavaScript生成&#xff0c;而非原始HTML代码&#xff0c;这其中并不包含Ajax请求。还有类似淘宝这种页面&#xff0c;即使是Ajax获取的数据&#xff0c;其Ajax接口中…

Centos8/linux/虚拟机安装docker

docker分为ce版和ee版&#xff0c;个人使用ce版就行了&#xff0c;别问为什么&#xff0c;问就是ee版收费。 这是在线版的&#xff0c;离线版的请参考Centos8离线下载安装docker 1.首先切换到root用户 2.为确保安装时出现不必要的问题&#xff0c;先更新一下yum包 sudo yum…

Kubernetes(K8S)学习(三):K8S实战案例

K8S实战案例 一、部署wordpressmysql&#xff08;NodePort方式&#xff09;&#xff08;1&#xff09;创建命名空间&#xff1a;wordpress&#xff08;2&#xff09;创建wordpress-db.yaml文件&#xff08;mysql&#xff09;&#xff08;3&#xff09;创建pod&#xff1a;mysql…

springcloud基本使用四(Feign远程调用)

springcloud创建两个子项目order-server和user-server具体数据信息请查看springcloud前三章 order-server向user-server远程调用数据 order-server引入依赖&#xff1a; <dependency><groupId>org.springframework.cloud</groupId><artifactId>sprin…

通过mapreduce程序统计旅游订单(wordcount升级版)

通过mapreduce程序统计旅游订单&#xff08;wordcount升级版&#xff09; 本文将结合一个实际的MapReduce程序案例&#xff0c;探讨如何通过分析旅游产品的预订数据来揭示消费者的偏好。 程序概览 首先&#xff0c;让我们来看一下这个MapReduce程序的核心代码。这个程序的目…

Qt中QIcon图标设置(标题、菜单栏、工具栏、状态栏图标)

1 exe程序图标概述 在 Windows 操作系统中&#xff0c;程序图标一般会涉及三个地方&#xff1b; &#xff08;1&#xff09; 可执行程序&#xff08;以及对应的快捷方式&#xff09;的图标 &#xff08;2&#xff09; 程序界面标题栏图标 &#xff08;3&#xff09;程序在任务…

设计模式之装饰模式精讲

概念&#xff1a;动态地给一个对象添加一些额外的职责。 装饰器模式侧重于在不改变接口的前提下动态地给对象添加新功能&#xff0c;保持对象结构的透明性&#xff0c;客户端无感知。 以一个咖啡制作和装饰的例子来帮助大家理解&#xff1a; public interface Coffee {double…

Java设计模式之观察者模式

观察者模式是一种行为设计模式&#xff0c;它允许一个对象&#xff08;称为主题或可观察者&#xff09;维护一系列依赖于它的对象&#xff08;称为观察者&#xff09;&#xff0c;当主题的状态发生变化时&#xff0c;它会自动通知所有的观察者。这种模式被广泛应用于实现对象之…

JavaScript动态渲染页面爬取——CSS位置偏移反爬案例分析与爬取实战

CSS位置偏移反爬案例分析与爬取实战 案例 案例网址&#xff1a;https://antispider3.scrape.cener/&#xff0c;页面如下图所示&#xff1a; 尝试用Selenium获取首页的页面源代码&#xff0c;并解析每个标题的内容&#xff1a; from selenium import webdriver from pyquery…

Android的图片加载框架

Android的图片加载框架 为什么要使用图片加载框架&#xff1f;图片加载框架1. Universal Image Loader [https://github.com/nostra13/Android-Universal-Image-Loader](https://github.com/nostra13/Android-Universal-Image-Loader)2. Glide [https://muyangmin.github.io/gl…

MQ消息队列详解以及MQ重复消费问题

MQ消息队列详解以及MQ重复消费问题 1、解耦2、异步调用3、流量削峰4、MQ重复消费问题&#xff0c;以及怎么解决&#xff1f;4.1、重复消费产生4.2、解决方法&#xff1a; https://blog.csdn.net/qq_44240587/article/details/104630567 核心的就是&#xff1a;解耦、异步、削锋…

跨平台内容策略:Kompas.ai让你的内容在各大平台上发光发热

在数字化营销的今天&#xff0c;品牌需要在多个社交媒体平台上建立强大的在线存在。每个平台都有其独特的用户群体和内容消费习惯&#xff0c;这就要求品牌制定精准的跨平台内容策略&#xff0c;以确保在不同的社交环境中都能发光发热。本文将深入探讨不同社交媒体平台的特点及…
推荐文章