我们使用Phpstorm打开我们的项目目录,展开项目目录文件夹。

Symfony项目其实也是composer项目,如果你新拿到一个Symfony项目, 你可以在控制台中使用composer install命令来安装这个项目所需要的依赖包。

现在我们看一下项目的目录结构。

bin目录下是console文件。如果你没有安装Symfony命令行工具,我们可以使用php bin/console来查看所有可用的命令。

在开发过程中,我们会大量的使用命令行工具来辅助开发。如果你安装了Symfony命令行工具,你可以使用Symfony console命令,来使用命令行工具。

它的底层也是调用了项目的console文件。

config目录是我们的配置文件目录,一些第三方的包包括一些项目的配置文件都在config目录中。通常使用yaml文件来进行配置。在Symfony中,yaml配置文件使用四个空格来进行排版。

public是我们Symfony项目的入口目录,index.php文件就在这里。如果我们项目有一些CSS或者JS资源,也存放在public目录中。它是可以公开访问的目录。

src目录是我们的源码目录,我们编写的所有代码都在src目录中。

var目录是缓存文件和日志文件目录。

vendor目录,当我们安装第三方的包或者Symfony组件时,所有的组件都会安装在vendor目录中。vendor目录中的文件不能修改。如果组件版本更新的话,修改的文件将会丢失。

我们来使用PHP内置的服务器来启动项目,我们可以使用Symfony命令行工具的serve命令来启动项目。在http://127.0.0.1:8000端口,我们就可以访问我们的项目了。

Symfony默认给了我们一个页面。我们没有编写任何一行代码,但是仍然可以访问这个页面。这是Symfony为我们提供的占位符页面。虽然它已经显示了,但这个页面仍然是404错误的页面。 我们刷新看一下错误代码,仍然是404。

下面我们将创建我们第一个页面。我们打开composer.json文件,Symfony为我们安装了symfony/flex这个组件。flex组件是Symfony的composer插件。使用flex我们很方便的就可以把Symfony的组件或者第三方的包,安装到Symfony中,并且进行自动化的配置。

Symfony中为了自动化的安装组件或者包并进行自动化的配置,提出了一个recipe的概念。它的中文翻译就是食谱。我们打开symfony.sh这个网站。在这里我们可以查看所有Symfony的组件和第三方的包。

当我们安装这个页面上的任意的包时,recipe就是这个包对应的配置文件。它就像食谱一样,指引这个包如何和我们的Symfony项目集成。 Symfony的flex组件将会自动下载对应的recipe配置文件,到我们的项目中,来完成这个包和我项目的集成。

我们想快速的开发我们第一个页面,我们搜索组件makermaker组件下方一个official官方这个标签。代表这是官方提供的包,官方提供的包都可以使用别名来进行安装。 如果是社区贡献的包,它没有别名的概念。

回到项目,我们使用composer req maker --dev来安装这个包。包安装完成后,我们在composer.json文件中,我们看到require-dev下,maker-bundle已经安装成功了。

require-dev下的包仅用于开发环境,当我们在生产环境下部署项目时,我们可以使用composer install --no-dev来忽略掉dev下所有的bundle。

我们再次查看symfony console命令,这时它就给我们生成了make命令,所有的make命令都是由maker-bundle提供的。我们使用make命令来创建我们的第一个页面。

Symfony是MVC框架,MVC的C就是controller。当有请求访问的时候,controller负责读取请求的参数,然后根据请求参数来执行不同的数据操作,最后返回一个响应对象,然后响应对象发送到浏览器。

我们在控制台中输入symfony console make:controller命令,来创建controller。这里报错了,它提示我们缺少了一个包。我们复制这个命令安装一下。

再次使用make:controller命令,我们需要输入controller类名,这里输入TestController。命令行会在src/Controller目录中创建对应的controller类。

这一行是PHP8.0提供的原生注解。Route是个路由,当我们访问/test路径时,Symfony会调用controller的index方法,最终会返回json方法提供的数据。

我们按command键点击json(windows系统按ctrl键),最终响应的是JsonResponse响应对象。我们回到首页输入/test,它返回了一个json字串。这不是我们想要的结果。

我们需要它显示一个页面,回到项目手动创建一个Response对象,这里输入HTML代码。

    #[Route("/test", name: "test")]
public function index(): Response
{
return new Response(<<<EOF
<html>
<head>
<title>这是我们的第一个页面</title>
</head>
<body>
<h1>Hello world</h1>
</body>
</html>
EOF
);
}

回到页面刷新,我们第一个页面它显示了。我们看到我们的源代码,就是刚才自己写的代码。

在下一节我们将讲解一下HTTP协议和Symfony是如何处理这个/test请求的。

本文转载于:https://www.teebb.com/content/first-page

《Symfony 5全面开发》教程03、使用Controller创建第一个页面的更多相关文章

  1. 微信小程序开发教程(二)创建第一个微信小程序

    在安装完“微信Web开发者工具”之后,通过开发者的微信扫码进入后,如图. 点击“添加项目”,填入之前获得的AppID(无AppID可忽略),输入项目名称“Hello WXapplet”,选定本地文件夹 ...

  2. 微信小程序从零开始开发步骤(二)创建小程序页面

    上一章注册完小程序,添加新建的项目,大致的准备开发已经完成,本章要分享的是 要创建一个简单的页面了,创建小程序页面的具体几个步骤: 1. 在pages 中添加一个目录 选中page,右击鼠标,从硬盘打 ...

  3. cocos2d-x游戏开发(二)之创建第一个项目

    配置好开发环境之后,尝试创建一个cocos项目 (1)打开cocos2d-x安装目录,如D:\DIY\cocos2d-x-3.3 看到目录下有可执行文件 download-deps 以及 setup ...

  4. Android快乐贪吃蛇游戏实战项目开发教程-03虚拟方向键(二)绘制一个三角形

    该系列教程概述与目录:http://www.cnblogs.com/chengyujia/p/5787111.html 一.绘制三角形 在上一篇文章中,我们已经新建了虚拟方向键的自定义控件Direct ...

  5. iOS开发教程:Storyboard全解析-第一部分

    本文转载至http://blog.csdn.net/chang6520/article/details/7945845 感谢原文作者分享     故事版(Storyboard)是一个能够节省你很多设计 ...

  6. Android教程-01 Android Studio创建第一个项目

    视频教程建议采用超清模式, 关注更多视频订阅我的优酷 最近一直使用Android Studio 简单把Android Studio介绍下 1. 首先介绍下 Android Studio的快捷键 由于之 ...

  7. Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录

    一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...

  8. Android开发教程大全介绍

    Android是由谷歌在2007年推出的一个开放系统平台,主要针对移动设备市场,目前版本为Android 4.0.Android基于Linux,开发者可以使用Java或C/C++开发Android应用 ...

  9. [ABP教程]第三章 创建、更新和删除图书

    Web应用程序开发教程 - 第三章: 创建,更新和删除图书 关于本教程 在本系列教程中, 你将构建一个名为 Acme.BookStore 的用于管理书籍及其作者列表的基于ABP的应用程序. 它是使用以 ...

随机推荐

  1. 什么是VPC

    1 什么是私有网络(VPC) 私有网络是一块可用户自定义的网络空间,您可以在私有网络内部署云主机.负载均衡.数据库.Nosql快存储等云服务资源.您可自由划分网段.制定路由策略.私有网络可以配置公网网 ...

  2. IEEE754浮点数表示法

    IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985)是一套规定如何用二进制表示浮点数的标准.就像"补码规则"建立了二进制位和正负数的一一对应关系一样,IEE ...

  3. 配置Nginx使用Active Directory 做认证

    配置Nginx使用AD做认证 nginx.conf 配置 http { ldap_server ldap { url ldap://xxx:389/DC=test,DC=com?sAMAccountN ...

  4. JavaFx 软件重启功能实现

    原文地址: JavaFx 软件重启功能实现 | Stars-One的杂货小窝 本篇使用Kotlin在TornadoFx中实践,没有Java代码的示例,各位自行参考,思路已在本文中提及 实现思路 主要思 ...

  5. 在树莓派上开发SpringBoot 之使用VSCode远程开发

    一些运行在ARM单板电脑上的IoT应用通常会提供RESTful风格的API接口.本次的文章记录如何在本地电脑上通过VS Code的远程开发功能,在树莓派端创建一个SpringBoot工程,并实现调试和 ...

  6. HowToDoInJava 其它教程 2 · 翻译完毕

    原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 JMS 教程 JMS 教 ...

  7. git rm 与 git rm --cached 的区别

    感谢原文作者:book_02 原文链接:https://www.jianshu.com/p/1c442fd398b7 git rm : 同时从工作区和索引中删除文件.即本地的文件也被删除了. git ...

  8. Docker私有仓库与Harbor部署使用

    Docker私有仓库与Harbor部署使用 目录 Docker私有仓库与Harbor部署使用 一.本地私有仓库 1. 下载registry镜像 2. 在daemon.json文件中添加私有镜像仓库地址 ...

  9. docker基础——5.Dockerfile

    把应用部署在容器中,改变了用文本文件保存配置信息的方式.而通过传环境变量配置. Dockerfile是一个文本文件,包括容器的指令.按顺序从上到下执行,第一行非注释指令必须是FROM指定基础镜像. D ...

  10. 【NetCore】依赖注入的一些理解与分享

    依赖注入 DI 前言 声明:我是一个菜鸟,此文是自己的理解,可能正确,可能有误.仅供学习参考帮助理解,如果直接拷贝代码使用造成损失概不负责. 相关的文章很多,我就仅在代码层面描述我所理解的依赖注入是个 ...