檢視原始碼 v1.7 的更動紀錄

請參閱 升級指南 來從 Phoenix 1.6.x 升級。

Phoenix v1.7 需要 Elixir v1.11+ 與 Erlang v22.1+。

驗證路由的介紹

Phoenix 1.7 包含一個新的 Phoenix.VerifiedRoutes 功能,它提供了 ~p 來搭配編譯時驗證來產生路由。

使用 sigil_p 巨集可讓您的應用程式中的路徑和 URL 在編譯時針對 Phoenix 路由器(們) 進行驗證。例如下列路徑和 URL 用法

<.link href={~p"/sessions/new"} method="post">Log in</.link>

redirect(to: url(~p"/posts/#{post}"))

將會針對標準的 Phoenix.Router 定義進行驗證

get "/posts/:post_id", PostController, :show
post "/sessions/new", SessionController, :create

不匹配的路由將會發出編譯警告

warning: no route path for AppWeb.Router matches "/postz/#{post}"
  lib/app_web/controllers/post_controller.ex:100: AppWeb.PostController.show/2

注意:需要 Elixir v1.14+ 才能獲得全面的警告。舊版本會正常運作並在新的編譯上發出警告,但對路由檔案的變更不會發出新的警告。

此功能會取代在 Phoenix 路由器中產生的 Helpers 模組,但輔助器會繼續運作並產生。您可透過傳遞 helpers: false 選項給 use Phoenix.Router 來停用路由輔助器。

phx.new 改頭換面

應用程式產生器 phx.new 已改進,Controller 和 LiveView 繪製都仰賴函數元件,終極簡化 Phoenix 應用程式的繪製堆疊並提供更好的重複利用。

新的應用程式隨附一系列經過良好文件化和容易取得的核心元件,預設情況下使用 Tailwind CSS 進行樣式調整。您可以透過 --no-tailwind 標記來選擇不使用 Tailwind CSS(Tailwind CSS 類別會保存在產生的元件中作為未來樣式調整的參考)。

1.7.14 (2024-06-18)

錯誤修正

  • 還原「將 follow_redirect/2 新增至 Phoenix.ConnTest」(#5797),因為這會與 LiveView 中預設透過 ConnTest 匯入的 follow_redirect/2 發生衝突

1.7.13 (2024-06-18)

錯誤修正

  • 修正 Cowboy2Adapter 中的 Elixir 1.17 警告
  • 修正驗證路由發出沒有檔案和位置的診斷

JavaScript 客户端錯誤修正

  • 當全球命名空間中沒有 sessionStorage 時,修正錯誤

強化功能

  • 加入 follow_redirect/2 到 Phoenix.ConnTest
  • 將 LiveView 1.0.0-rc 用於新產生的應用程式
  • 針對產生的 core_components.ex 中的表單錯誤,使用新的 Phoenix.Component.used_input?
  • 允許從 umbrella 根執行 mix ecto.setup
  • config_change 回呼執行時,將 Endpoint 靜態快取清單撞擊

1.7.12 (2024-04-11)

JavaScript Client 錯誤修正

  • 修復所有未結合計點,以及任何單一未結合計點實例呼叫頻道離開時,將其從 socket 中移除

強化功能

  • [phx.gen.auth] 加入進階的 Session 固定防護。對於之前使用 phx.gen.auth 的應用程式,可以在驗證模組的 renew_session 函式中加入以下這一行

      defp renew_session(conn) do
    +   delete_csrf_token()
    
        conn
        |> configure_session(renew: true)
        |> clear_session()

    注意:由於 Session ID 預設會使用僅限 Http 的 Cookie,在變更之前執行此攻擊的唯一方式是應用程式容易受到 XSS 攻擊,而這本身便會授予比 CSRF 固定更嚴重的「特權」。

JavaScript Client 強化功能

  • 僅在 WebSocket 從未成功連線時,記住瀏覽器 Session 的長輪詢折衷方案

1.7.11 (2024-02-01)

強化功能

  • [phx.new] 對於新產生的應用程式,預設使用 Bandit 網頁伺服器
  • [phx.new] 對於新產生的應用程式,預設啟用長輪詢傳輸並在 websocket 失敗時自動折衷

JavaScript Client 強化功能

  • 支援新的 longPollFallbackMs 選項,在 websocket 連線失敗時自動折衷
  • 支援新的 debug 選項,以啟用詳細記錄

不建議事項

  • 捨棄 Endpoint 中 c:init/2 回呼,建議改用 config/runtime.exs{Phoenix.Endpoint, options}

1.7.10 (2023-11-03)

錯誤修正

  • [phx.new] 修復 CoreComponents.flash 產生不正確的 ID,導致在按一下時無法關閉快閃訊息

強化功能

  • [Phoenix.Endpoint] 支援 Endpoint.url/0 的動態通訊埠

1.7.9 (2023-10-11)

問題修正

  • [Phoenix.CodeReloader] - 修正造成編譯錯誤的 code reloader 錯誤
  • [phx.new] – 修正當傳入 --no-html 時,LiveView debug heex 設定檔產生問題

1.7.8 (2023-10-09)

問題修正

  • [Phoenix.ChannelTest] 推播資料時將清單字串化
  • [Phoenix.Controller] 修正傳送非 ASCII 名稱的下載資料時的檔案名稱
  • [Phoenix.CodeReloader] 移置最近 Elixir 版本中重複的警告
  • [Phoenix.CodeReloader] 如果診斷資料中沒有檔案資訊,請勿讓 code reloader 發生當機
  • [Phoenix.Logger] 當狀態為原子時,請勿讓程式當機
  • [phx.gen.release] 修復在 Elixir v1.15 中執行 mix phx.gen.release --docker 時會因 :http_util 錯誤而失敗的問題
  • [phx.gen.*] 由於沒有簡潔的比對輸入,略過產生表單中的貼圖輸入
  • [phx.new] 修正 umbrella 專案中的 tailwind/esbuild 設定檔與路徑
  • [phx.new] 如果動作為空,請勿為動作產生 th

強化功能

  • [Phoenix] 允許最新 plug_crypto
  • [Phoenix.Endpoint] 支援動態 socket 排水器設定檔
  • [Phoenix.Logger] 將 socket 序列化 / 版本記錄變更為警告
  • [Phoenix.VerifiedRoutes] 新增在 ~p 中對包含片段的靜態資源的支援
  • [phx.gen.schema] 支援 --repo--migration-dir 旗標
  • [phx.new] 在 core 元件中允許 <.input type="checkbox"> 沒有 value 屬性
  • [phx.new] 允許在產生器中使用 UTC 日期時間
  • [phx.new] 使用 sqlite 3 時,當發布開始時自動執行移轉
  • [phx.new] 允許在 flash 元件中指派 ID
  • [phx.new] 新增 --adapter 旗標,以使用 bandit 產生應用程式
  • [phx.new] 加入 DNSCluster,以執行簡單的叢集
  • [phx.routes] 支援 --method 選項

1.7.7 (2023-07-10)

強化功能

  • 支援透過 longpoll 傳輸,將二進位 payload 傳入通道

1.7.6 (2023-06-16)

問題修正

  • 支援 websock_adapter 0.5.3

強化功能

  • 允許在另一個程序中使用 Phoenix.ChannelTest socket/connect

1.7.5 (2023-06-15)

問題修正

  • 修復排空連線時發生的 LongPoll 錯誤

1.7.4 (2023-06-15)

問題修正

  • 修復 Websocket draining 傳送不正確的關閉代碼,導致 LiveView 重新載入頁面而不是重新連線

1.7.3 (2023-05-30)

強化功能

  • 新增應用程式使用 LiveView 0.19

錯誤修正

  • 修正偵錯程式掛載時,編譯錯誤頁面顯示模糊錯誤(應用程式編譯失敗時)
  • 修正路徑驗證時,警告訊息列印兩次的錯誤

1.7.2 (2023-03-20)

改善

  • [端點] 加入 socket 排水,用於批次和循序 Channel/LiveView socket 關閉
  • [程式碼重新載入器] 改善編譯錯誤頁面,移除水平滾動條,並包含編譯的所有警告和錯誤
  • [phx.new] 支援 --no-tailwind--no-esbuild 旗標
  • [phx.new] 將 heroicons 移至 assets/vendor
  • [phx.new] 簡化核心模式對話框,使用新的 JS.exec 指令以減少程式碼量
  • [socket] 允許在 WebSockets 中設定自訂 csrf_token_keys

1.7.1 (2023-03-02)

改善

  • [phx.new] app.css 捆綁嵌入 heroicons,以最佳化使用

1.7.0 (2023-02-24)

錯誤修正

  • 透過批次訊息,修正長輪詢傳輸中的競爭狀況

1.7.0-rc.3 (2023-02-15)

改善

  • 針對 phx.gen.live 產生器,使用基於串流的集合
  • 更新 phx.gen.live 產生器,以使用 Phoenix.Component.to_form

1.7.0-rc.2 (2023-01-13)

錯誤修正

  • [路由器] 修正在類似路徑上造成不正確匹配順序的路由錯誤
  • [phx.new] 修復在某些情況下安裝掛起的問題

1.7.0-rc.1 (2023-01-06)

改善

  • 如果在函式外部使用已驗證路徑,則會引發異常
  • 將 tailwind.install/esbuild.install 加入混合設定

錯誤修正

  • [存在] 修復導致偶發存在錯誤的任務關閉匹配
  • [VerifiedRoutes] 修復擴充導致編譯時期相依項比必要的還多
  • [phx.gen.auth] 將密碼輸入新增至密碼重設編輯表單
  • [phx.gen.embedded] 修正 phx.gen.embedded 遺漏 :references 產生
  • 修正核心元件中文字區域呈示問題
  • 在攔截時中止所有 socket,以修正長輪詢回應已送出的錯誤

1.7.0-rc.0 (2022-11-07)

不推薦使用

  • Phoenix.Controller.get_flash 已棄用,取而代之的是新的 Phoenix.Flash 模組,提供統一的 flash 存取權

改進功能

  • [Router] 新增 Phoenix.VerifiedRoutes,使用 ~p 為基礎的路由產生,並於編譯時進行驗證。
  • [Router] 支援 helpers: false,使用 Phoenix.Router 可停用輔助函式產生。
  • [Router] 新增 --info [url] 切換至 phx.routes,取得 url/path 相關的路由資訊。
  • [Flash] 新增 Phoenix.Flash,統一 flash 存取權。

JavaScript 客户端錯誤修正

  • 修正斷線後仍送出心跳訊號,導致異常斷線。

v1.6

v1.6 版本的變更紀錄可在 v1.6 分支 找到。