查看源代码 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 已改进,以依赖函数组件来进行控制器和 LiveView 的渲染,最终简化了 Phoenix 应用程序的渲染堆栈并提供了更好的重用性。

新的应用程序附带了一组经过良好文档记录且易于访问的核心组件,默认情况下使用 Tailwind CSS 进行样式设置。您可以使用 --no-tailwind 标志选择不使用 Tailwind CSS(Tailwind CSS 类将保留在生成的组件中,作为将来样式设置的参考)。

1.7.14 (2024-06-18)

错误修复

  • 恢复“将 follow_redirect/2 添加到 Phoenix.ConnTest” (#5797),因为这与 LiveView 中的 follow_redirect/2 冲突,默认情况下 ConnTest 会导入该函数

1.7.13 (2024-06-18)

错误修复

  • 修复 Elixir 1.17 中 Cowboy2Adapter 的警告
  • 修复已验证路由在没有文件和位置的情况下发出诊断信息的问题

JavaScript 客户端错误修复

  • 修复 sessionStorage 在全局命名空间中不可用时发生的错误

增强功能

  • follow_redirect/2 添加到 Phoenix.ConnTest
  • 对于新生成的应用程序使用 LiveView 1.0.0-rc
  • 在生成的 core_components.ex 中使用新的 Phoenix.Component.used_input? 来处理表单错误
  • 允许从伞形根目录执行 mix ecto.setup
  • config_change 回调中更新 Endpoint 静态缓存清单

1.7.12 (2024-04-11)

JavaScript 客户端错误修复

  • 修复在任何单一未加入的频道实例上调用频道离开时,从套接字中删除所有未加入的频道的问题

增强功能

  • [phx.gen.auth] 添加了增强的会话固定保护。对于之前使用 phx.gen.auth 的应用程序,可以在 auth 模块中的 renew_session 函数中添加以下行

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

    注意:由于会话 ID 默认情况下位于一个 http-only cookie 中,因此在进行此更改之前,执行此攻击的唯一方法是如果您的应用程序已经容易受到 XSS 攻击,这本身比 CSRF 固定提供了更多升级的“特权”。

JavaScript 客户端增强功能

  • 仅在 WebSocket 从未成功连接的情况下,才将长轮询回退记忆到浏览器会话中

1.7.11 (2024-02-01)

增强功能

  • [phx.new] 对于新生成的应用程序,默认情况下使用 Bandit webserver
  • [phx.new] 对于新生成的应用程序,默认情况下启用长轮询传输,并在 websocket 失败时自动回退

JavaScript 客户端增强功能

  • 支持新的 longPollFallbackMs 选项,在 websocket 连接失败时自动回退
  • 支持新的 debug 选项,以启用详细日志记录

弃用

  • 弃用终结点中的 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] - 修复代码重新加载器中的错误,导致编译错误
  • [phx.new] – 修复在传递 --no-html 时生成 LiveView 调试 heex 配置的问题

1.7.8 (2023-10-09)

错误修复

  • [Phoenix.ChannelTest] 在推送数据时将列表字符串化
  • [Phoenix.Controller] 修复发送带有非 ASCII 命名文件的下载时的文件名问题
  • [Phoenix.CodeReloader] 删除在最新 Elixir 版本中出现的重复警告
  • [Phoenix.CodeReloader] 如果诊断信息中缺少文件信息,则不要崩溃代码重新加载器
  • [Phoenix.Logger] 状态为原子时不要崩溃
  • [phx.gen.release] 修复 mix phx.gen.release --docker 在 Elixir v1.15 上使用 :http_util 错误而失败的问题
  • [phx.gen.*] 跳过生成的表单中的映射输入,因为没有简单的匹配输入
  • [phx.new] 修复伞形项目中的 tailwind/esbuild 配置和路径
  • [phx.new] 如果操作为空,则不要为操作渲染 th

增强功能

  • [Phoenix] 允许最新的 plug_crypto
  • [Phoenix.Endpoint] 支持动态套接字排水配置
  • [Phoenix.Logger] 将套接字序列化器/版本日志更改为警告
  • [Phoenix.VerifiedRoutes] 在 ~p 中添加对包含片段的静态资源的支持
  • [phx.gen.schema] 支持 --repo--migration-dir 标志
  • [phx.new] 允许在核心组件中使用没有 value 属性的 <.input type="checkbox">
  • [phx.new] 允许在生成器中使用 UTC 日期时间
  • [phx.new] 在使用 sqlite 3 时,在发布启动时自动迁移
  • [phx.new] 允许在闪存组件中分配 ID
  • [phx.new] 添加 --adapter 标志,用于使用 bandit 生成应用程序
  • [phx.new] 包含 DNSCluster 用于简单集群
  • [phx.routes] 支持 --method 选项

1.7.7 (2023-07-10)

增强功能

  • 支持通过长轮询传输将传入的二进制有效负载发送到频道

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 排水发送错误的关闭代码,导致 LiveView 重新加载页面而不是重新连接

1.7.3 (2023-05-30)

增强功能

  • 对于新应用程序使用 LiveView 0.19

错误修复

  • 修复插件调试器上应用程序无法编译时,编译错误页面显示模糊错误的问题
  • 修复路由验证中两次打印警告的问题

1.7.2 (2023-03-20)

增强功能

  • [Endpoint] 添加套接字排水功能,用于批量和协调频道/LiveView 套接字关闭
  • [代码重新加载器] 改进编译错误页面,以删除水平滚动并包含来自编译的所有警告和错误
  • [phx.new] 支持 --no-tailwind--no-esbuild 标志
  • [phx.new] 将 heroicons 移动到 assets/vendor
  • [phx.new] 简化核心模态以使用新的 JS.exec 指令,以减少占用空间
  • [套接字] 允许在 WebSocket 中使用自定义 csrf_token_keys

1.7.1 (2023-03-02)

增强功能

  • [phx.new] 将 heroicons 嵌入到 app.css 捆绑包中,以优化使用

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 添加到 mix setup

错误修复

  • [Presence] 修复任务关闭匹配导致偶尔出现的存在错误的问题
  • [VerifiedRoutes] 修复导致比必要更多的编译时依赖项的扩展问题
  • [phx.gen.auth] 将密码输入添加到密码重置编辑表单中
  • [phx.gen.embedded] 修复了 phx.gen.embedded 中缺少 :references 生成的错误
  • 修复核心组件中 textarea 的渲染问题
  • 在拦截时停止所有套接字,以修复长轮询响应已发送错误

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

弃用

  • Phoenix.Controller.get_flash 已被弃用,建议使用新的 Phoenix.Flash 模块,该模块提供统一的闪存访问方式。

增强功能

  • [Router] 添加了 Phoenix.VerifiedRoutes 用于基于 ~p 的路由生成,并进行编译时验证。
  • [Router] 支持在 use Phoenix.Router 中使用 helpers: false 来禁用助手生成。
  • [Router] 添加了 --info [url] 开关到 phx.routes 用于获取关于 url/路径的路由信息。
  • [Flash] 添加了 Phoenix.Flash 用于统一的闪存访问。

JavaScript 客户端错误修复

  • 修复了断开连接后仍然发送心跳导致异常断开连接的问题。

v1.6

v1.6 版本的 CHANGELOG 可以找到 v1.6 分支 中。