之前用過symfony2.8系列的版本開發過在線教育的購課網站,所以對這個框架不是太陌生。已經有半年沒用過了,今天把最新版4.2的使用筆記記錄下來,方便自己和他人對symfony有更深的理解。(未完)
composer安裝Symfony框架
下載Composer 最新版本:v1.7.3
Windows Installer
安裝程序將爲您下載composer並設置PATH環境變量,以便您可以composer
從任何目錄中進行調用。
下載並運行Composer-Setup.exe - 它將在執行時安裝最新的composer版本。
安裝的時候需要選擇你的PHP位置
用默認的就一路確定即可
cmd打開
composer --version回車查看版本
然後進入你要下載symfony的位置
- composer create-project symfony/website-skeleton my-project
在開發時,您應該使用Nginx或Apache等Web服務器(請參閱配置Web服務器以運行Symfony)。 但是對於開發來說,使用Symfony PHP Web服務器更加容易。
首先,進入你的新項目並安裝服務器:
- 要啓動服務器,請運行:php bin/console server:run
- 如果退出就Ctrl+C
一、路由
1.配置
如果使用的是apache或者nginx,得配置根目錄到public目錄下
2.測試訪問首頁
3.測試路由 symfony的路由配置方法有很多種,使用起來有多牛逼有多牛逼,這裏只配置常用的兩種簡單的demo。ps:太複雜的我也沒玩過=-=
- 使用confg目錄下的routes.yaml配置路由
- 使用註釋的方法配置路由(去掉上面routes.yaml的路由配置)
二、渲染模板
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文件內容換成如下:
<?php
namespace App\Controller;
use App\Entity\Product;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
class ProductController extends AbstractController
{
/**
* @Route("/product", name="product")
*/
public function index()
{
$entityManager = $this->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