Symfony

目录

安装

简言

实例


安装

本次安装环境是 Windows8.1操作系统 + php V7.3.12 。

本次安装的Symfony版本是5.3.6。

安装Symfony CLI成功后,就可以通过symfony命令安装Symfony应用、启动本地网络服务器、检查依赖项的安全漏洞。

如果安装Symfony CLI不成功,这时还可以用Composer方式安装Symfony应用。

Composer方式安装Symfony简述如下。

命令行界面切换到网站目录下,然后运行:

composer create-project symfony/website-skeleton symfony

即可下载一个传统网络应用版本的symfony到网站目录下的symfony文件夹里,symfony项目的缓存和日志目录【\var\cache,\var\log】需要有写入权限。

给symfony项目添加调试功能,可在symfony项目根目录下运行:

composer require --dev debug

然后访问localhost/symfony/public/,就可以看到如下页面:

然后要注意修改项目根目录下的.env文件里的数据库链接。.env文件里会默认开启postgresql数据库连接,应该按照程序所在环境配置好数据库连接,否则按照教程开发第一个页面时会报错。如本地用的是mysql数据库,那么就应该在.env文件里配置好mysql数据库连接,并用#注释掉postgresql连接。

Symfony项目里可以在\config\routes.yaml里配置路由,也可以通过注解【annotation】的方式来在控制器里配置路由。注解路由是Symfony推荐的配置路由方式,想使用注解路由,可以在项目根目录下运行:

composer require annotations

在控制器里写注释时,不要像官方文档示例那样在注释外写符号+,会导致报错。

如果想要配置路由的文件后缀名是.xml或者.php,需要在src/Kernel.php里添加.xml和.php文件拓展名支持。

Symfony里附带了twig模板语言,安装运行:

composer require twig

简言

1. Symfony是一套独立的php组件,重点在控制器和HTTP协议【Request和Respond】,不局限于MVC架构。可以直接用Symfony框架开发程序,也可以用Symfony框架开发出属于自己的全栈全功能框架。

2. 可以通过Request::createFromGlobals()方法创建一个含有全局请求数据【$_GET,$_POST,[],$_COOKIE,$_FILES,$_SERVER】的对象,Request::create()方法来创建模拟请求,可以通过new Response()创建响应对象,然后通过send()方法发送响应。

3. symfony的响应内容可以是HTML页面、json字符串、XML文件、404页面、重定向、文件下载。

4. 创建第一个页面程序。先在项目的\src\Controller目录下创建控制器文件,在控制器使用注解路由,然后在Templates目录下新建对应的目录和文件。如果模板文件里没有body元素,则不会显示Web调试工具栏。

5. Symfony项目里会有一个强大的调试工具:bin/console命令。可以在Symfony项目根目录下运行

php bin/console

来看到调试信息的命令列表,例如:

查看当前应用里的所有路由

php bin/console debug:router

可以在后面再接一个路由名称以查看该路由的一些详细信息。

查看一段网址是否有路由规则匹配

php bin/console route:match /random/number/200

查看symfony应用的版本

php bin/console -V

6. Symfony的Web调试工具栏,能够查看路由、运行性能、日志等信息。

7. 注释路由里可以给路由规则起一个名称,每个路由名称在应用程序里必须是唯一的。URL里的查询字符串【?=params】不会被当作路由规则来匹配。

8. 建议不要在一个文件里写多个类,否则symfony的路由规则会只看文件里第一个类的注释路由,该文件里其它的类里的注释路由则会被忽略。

9. HTML表单只支持get和post方式提交,如果要用其它方式提交表单,可以在表单里新建一个名为“_methd”的隐藏表单域,其值是其它请求方式名称【大写】。

10. 路由规则里可以用可选参数,但如果URL里没有可选参数对应得上的值,那么就不会匹配成功带有可选参数的路由规则。路由规则里的_fragment可用于匹配和设置URL里的锚点部分。

11. Symfony附带的一个可选基本控制器类是AbstractController,命名空间是:

Symfony\Bundle\FrameworkBundle\Controller。可以通过继承这个类来获得一些帮助方法,例如可用于视图模板输出的render(),可通过路由名称调用路由并传入参数的generateUrl(),重定向页面的redirect()redirectToRoute()方法。

12. Symfony框架自带了很多有用的类库和功能,这些可被称之为服务,可以将这种服务的类或者接口名称作为参数传递给控制器里的方法,Symfony会在服务容器里找对应的能被调用的服务对象,并传递方法。

如果真的对Symfony框架感兴趣,有空时可以多看看Symfony自带有哪些类库和功能,以及是如何实现的。

如果对于程序内部的一些实现流程不够清楚,可以在关键点手动抛出异常,调试模式下应该能看到程序处理请求的一些文件调用过程。

13. 可以在项目根目录下通过命令生成一个新的控制器类文件及其对应的视图文件。

示例代码:

php bin/console make:controller IndexController

14. 在Symfony里,所有错误都被视作异常。

15. Twig模板继承类似于PHP类继承。

实例

\src\Controller\RandomController.php

<?php
namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

use Symfony\Component\Routing\Annotation\Route;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;

use Psr\Log\LoggerInterface;

class RandomController extends AbstractController
{
    /**
     * @Route("/random/number/{max}",name="app_random_controller")
     */
    public function number(int $max,LoggerInterface $logger): Response
    {
        $number = random_int(0, $max);

        $logger->info('写入成功!');

        // return new Response(
        //     '<html><body>Random number: '.$number.'</body></html>'
        // );
        return $this->render('random/number.html.twig', [
        	'random_number' => $number
        ]);
    }
}

\templates\random\number.html.twig

<h1>The random number is: {{random_number}} </h1>

运行效果

访问方式一:

在项目目录下通过php -S localhost:8081启动php内置的简易服务器。然后

访问http://localhost:8081/random/number/200

访问方式二:

通过项目的入口文件来访问。例如:

http://localhost/symfony/public/index.php/random/number/200

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值