Phoenix 0.10.0 发布,包含资产处理、生成器等新功能

发布于 2015 年 3 月 9 日 作者 Chris McCord


我们本周末发布了 Phoenix 0.10.0,我们非常高兴地分享我们一直在开发的新功能。此版本带来了由 brunch 提供支持的资产构建系统,css/js/eex 模板的实时重载,表单构建器,以及新的 Ecto 与生成器的集成,让你能够快速启动和运行。

此版本中包含了如此多的好东西,以至于它值得一个屏幕截图,以便你可以看到它在行动中的样子。

实时重载

更改任何 css、js 或 EEx 模板,然后观看浏览器立即重新加载你的更改。最棒的是我们不需要任何浏览器插件。一切都由 Phoenix 通道驱动,并且无论你选择哪种 javascript 工具,它都可以正常工作。试一试 - 你会爱上它的。

静态资产处理

我们已经集成了 Brunch,以实现快速、简单的资产编译,它 Just Works。当你启动开发中的 mix phoenix.server 时,一个 brunch 进程会自动与你的端点一起运行,并且你位于 web/static/jsweb/static/css 中的资产将在文件发生更改时被编译。更棒的是,使用我们新的实时重载功能,这些重新编译会在浏览器中重新加载,以获得简化的开发体验。我们还在 Brunch 集成中构建了一种方式,让你可以连接自己的资产系统,例如 Gulp、Grunt、Webpack 等。

开箱即用,我们支持 Sass 和 ES6 javascript 编译,但使用其他工具扩展你的 brunch-config.js 以支持你的资产工作流非常容易。

我们已经集成了 Brunch,以实现快速、简单的资产

编译,它 Just Works。当你启动开发中的 mix phoenix.server 时,一个 brunch 进程会自动与你的端点一起运行,并且你位于 web/static/jsweb/static/css 中的资产将在文件发生更改时被编译。更棒的是,使用我们新的实时重载功能,这些重新编译会在浏览器中重新加载,以获得简化的开发体验。我们还在 Brunch 集成中构建了一种方式,让你可以连接自己的资产系统,例如 Gulp、Grunt、Webpack 等。

开箱即用,我们支持 Sass 和 ES6 javascript 编译,但使用其他工具扩展你的 brunch-config.js 以支持你的资产工作流非常容易。

此版本带来了两个新协议,Phoenix.HTML.FormDataPhoenix.Param,它们使将你的模型层与 Phoenix 的新表单和链接构建器集成变得很简单。作为一个默认的但可选的依赖项,我们现在通过 phoenix_ecto 项目包含 Ecto 集成,你可以在其中看到这两个新协议的实际应用。让我们来检查一下。

<%= form_for @changeset, @action, fn f -> %>
  <%= if @changeset.errors != [] do %>
    <p style="color: red">Oops, something went wrong!</p>
  <% end %>

  <p>
    <label>
      <span>Title:</span>
      <%= text_input f, :title %>
    </label>
  </p>

  <p>
    <label>
      <span>Rank:</span>
      <%= number_input f, :rank %>
    </label>
  </p>

  <p>
    <%= submit "Submit" %>
  </p>
<% end %>

form_for 这里接受一个 Ecto changeset,但将支持实现 FormData 协议的任何数据结构。使用表单构建器,我们为你自动注入 CSRF 令牌以验证请求,并且你可以享受新的表单输入辅助函数,例如 text_inputnumber_input

除了表单之外,我们现在还包含一个 link 函数,用于在你的模板中构建锚点。

<%= for post <- @posts do %>
  <tr>
    <td><%= post.title %></td>
    <td><%= post.rank %></td>

    <td><%= link "Show", to: post_path(@conn, :show, post) %></td>
    <td><%= link "Edit", to: post_path(@conn, :edit, post) %></td>
    <td><%= link "Delete", to: post_path(@conn, :delete, post), method: :delete %></td>
  </tr>
<% end %>

注意我们如何能够编写 post_path(@conn, :show, post) 而不是 post_path(@conn, :show, post.id)?这要归功于新的 Phoenix.Param 协议,该协议允许你定义如何将资源转换为路径和 URL。你可能还注意到 method: :delete 选项。这会将链接标签转换为表单提交,作为 DELETE 请求,并为你注入 CSRF 令牌。它对于快速链接以删除或更新资源非常方便,而无需自己构建表单。

资源生成器

Ecto 集成包含一个新的 mix phoenix.gen.resource 任务,它使用样板代码生成引导一个模型,让你能够快速了解 Phoenix 和 Ecto,并立即开始构建应用程序。从一个像这样的单个命令开始

mix phoenix.gen.resource Post posts title:string rank:integer

一个迁移文件将使用提供的模式创建,并将生成模型、视图、模板和控制器文件以执行 CRUD 操作。这是一种学习 Phoenix 基础知识和体验最新、最强大的 Ecto 功能的好方法。

从 0.9.x 升级

请查看这些 0.9.x 到 0.10.0 的升级说明,以使你的现有应用程序更新到最新版本。

参与进来

这就是 Phoenix 0.10.0。如果你错过了之前的版本,我们对我们的通道系统进行了许多改进,包括对第三方后端的支持,从 Redis 开始。现在我们简化了开发体验。随着我们向 1.0 版本迈进,我们很快就会发布一些重大公告,因此请订阅 phoenix-corephoenix-talk 邮件列表,并参与到 #elixir-lang IRC 中。随时加入并提出问题,并为他人提供帮助。

编码愉快!