查看源代码 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 分支 中。