Symfony框架如何使用的筆記(symfony4.2)

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

  1. composer create-project symfony/website-skeleton my-project

在開發時,您應該使用Nginx或Apache等Web服務器(請參閱配置Web服務器以運行Symfony)。 但是對於開發來說,使用Symfony PHP Web服務器更加容易。

首先,進入你的新項目並安裝服務器:

  1. 要啓動服務器,請運行:php bin/console server:run
  2. 如果退出就Ctrl+C

一、路由

1.配置

如果使用的是apache或者nginx,得配置根目錄到public目錄下

2.測試訪問首頁

3.測試路由 symfony的路由配置方法有很多種,使用起來有多牛逼有多牛逼,這裏只配置常用的兩種簡單的demo。ps:太複雜的我也沒玩過=-=

  1. 使用confg目錄下的routes.yaml配置路由

     

  2. 使用註釋的方法配置路由(去掉上面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生成一個新的控制器類:

 php bin/console make:controller BrandNewController

創建控制器會自動生成相應的模板:

 並且把控制器和模板的基礎代碼給寫進去:

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 再次使用:

 php bin/console make:entity
Class name of the entity to create or update
> Product

 to stop adding fields):
> description

Field type (enter ? to see all types) [string]:
> text

Can this field be null in the database (nullable) (yes/no) [no]:
> no

 to stop adding fields):
>
(press enter again to finish)

這會添加新description屬性getDescription()setDescription() 方法:


新屬性已映射,但在product表中尚不存在。沒問題!生成新遷移:

 

 php bin/console make:migration

這次,生成的文件中的SQL將如下所示:

1
ALTER TABLE product ADD description LONGTEXT NOT NULL

遷移系統很聰明。它將所有實體與數據庫的當前狀態進行比較,並生成同步它們所需的SQL!像以前一樣,執行遷移:

 php bin/console doctrine:migrations:migrate

這隻會執行一個新的遷移文件,因爲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

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章