之前用过symfony2.8系列的版本开发过在线教育的购课网站,所以对这个框架不是太陌生。已经有半年没用过了,今天把最新版4.2的使用笔记记录下来,方便自己和他人对symfony有更深的理解。(未完)
安装程序将为您下载composer并设置PATH环境变量,以便您可以composer
从任何目录中进行调用。
下载并运行Composer-Setup.exe - 它将在执行时安装最新的composer版本。
安装的时候需要选择你的PHP位置
用默认的就一路确定即可
cmd打开
composer --version回车查看版本
然后进入你要下载symfony的位置
在开发时,您应该使用Nginx或Apache等Web服务器(请参阅配置Web服务器以运行Symfony)。 但是对于开发来说,使用Symfony PHP Web服务器更加容易。
首先,进入你的新项目并安装服务器:
1.配置
如果使用的是apache或者nginx,得配置根目录到public目录下
2.测试访问首页
3.测试路由 symfony的路由配置方法有很多种,使用起来有多牛逼有多牛逼,这里只配置常用的两种简单的demo。ps:太复杂的我也没玩过=-=
symfony自带twig模板引擎,不会twig语法的可以先去https://blog.csdn.net/sinat_15955423/article/details/81236499看看
1.测试视图页
首先得确保LuckyController继承
Symfony的基类AbstractController
:
2.查看所有路由
在控制台输入:php bin/console 获取所有命令列表
php bin/console debug:router 可以获取当前所有的路由
3.创建路由
symfony有很多种创建路由方法,比如在控制器上注释路由,还有控制器生成路由,还有从模板生成...
用法很多,这里还是只做控制器注释路由。
测试同一个路由,有无参数时指向不同控制器的方法:
4.重定向路由
return $this->redirectToRoute('app_lucky_home',['max'=>10]);
1.为了节省时间,您可以安装Symfony Maker并告诉Symfony生成一个新的控制器类:
|
创建控制器会自动生成相应的模板:
并且把控制器和模板的基础代码给写进去:
2.如果要从Doctrine 实体生成整个CRUD ,请使用:
php bin/console make:crud Product
如果没有实体前运行上面的创建crud会报错:(意思就是你还没创建链接上数据库)
3.安装数据库和Doctrine ORM(实体映射)
1)首先,通过ORM包以及MakerBundle安装Doctrine支持,这可以自动生成一些代码:
composer require symfony/orm-pack
composer require symfony/maker-bundle --dev
2) 配置数据库
找到并自定义.env
:
3)生成数据库
上面已经设置了连接参数,Doctrine可以创建数据库自定义名symfony:
php bin/console doctrine:database:create
4.创建实体类
如果你还没想好数据库是什么样的,您已经知道需要一个Product
对象来表示这些产品。
您可以使用该make:entity
命令创建此类以及所需的任何字段。该命令会问你一些问题 - 操作如下:
php bin/console make:entity
上面就会自动生成出实体类文件Product.php和数据库储存文件ProductRepository.php
该类称为“实体”。很快,您将能够将Product对象保存和查询到product
数据库中的表。Product
实体中的每个属性都可以映射到该表中的列。这通常使用注释完成:@ORM\...
您在每个属性上方看到的注释:
5.迁移:创建数据库表/模式
该Product
班是完全配置好并保存到一个product
表。如果您刚刚定义了此类,那么您的数据库实际上还没有该product
表。要添加它,您可以利用已安装的DoctrineMigrationsBundle:
php bin/console make:migration
如果您打开此文件,它将包含更新数据库所需的SQL!要运行该SQL,请执行迁移:
php bin/console doctrine:migrations:migrate
6.迁移和添加更多字段
但是如果你需要添加一个新的字段属性Product
,比如description
?您可以编辑该类以添加新属性。但是,你也可以make:entity
再次使用:
|
这会添加新description
属性getDescription()
和setDescription()
方法:
新属性已映射,但在product
表中尚不存在。没问题!生成新迁移:
|
这次,生成的文件中的SQL将如下所示:
|
|
迁移系统很聪明。它将所有实体与数据库的当前状态进行比较,并生成同步它们所需的SQL!像以前一样,执行迁移:
|
这只会执行一个新的迁移文件,因为DoctrineMigrationsBundle知道第一次迁移已经在之前执行过。在幕后,它管理一个migration_versions
表来跟踪这个。
每次更改模式时,运行这两个命令以生成迁移,然后执行它。确保提交迁移文件并在部署时执行它们。
7.将对象保留到数据库
是时候将Product
对象保存到数据库了!让我们创建一个新的控制器进行实验:
php bin/console make:controller ProductController
把生成的Product.php文件内容换成如下:
getDoctrine()->getManager();
$product = new Product();
$product->setName('Keyboard');
$product->setPrice(1999);
$product->setDescription('Ergonomic and stylish!');
// tell Doctrine you want to (eventually) save the Product (no queries yet)
$entityManager->persist($product);
// actually executes the queries (i.e. the INSERT query)
$entityManager->flush();
return new Response('Saved new product with id '.$product->getId());
/* return $this->render('product/index.html.twig', [
'controller_name' => 'ProductController',
]);*/
}
}
更新日期:2019年04月28日
今天准备用symfony做api写个vue博客,使用的是Linux系统,继续写一下Linux上面如何使用symfony:
一、composer方式安装
composer create-project symfony/skeleton my_project
显示报错,因为symfony4.2需要更新的composer版本,我的版本太低
更新一下composer,你的如果比较新就不用管了
/usr/bin/composer self-update
二、创建微服务
composer create-project symfony/skeleton my_project
权限不够的话得前面加sudo