之前用過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