我对默认 Phoenix 样板的更改

主要观点:作者在自己的项目中对Phoenix默认项目样板进行了一些修改,包括页面标题定义、实现软删除的Queryable模块、使用前缀和人类可读的对象 ID 以及使用 heex 组件渲染邮件等方面。
关键信息:

  • 页面标题定义:在Phoenix默认的根布局中,assigns[:page_title]有默认的页面标题 fallback。作者喜欢在 HTML 视图中定义title/2函数来返回页面标题,通过布局助手调用,并处理了未定义title/2函数的情况及运行时错误。对于 Live View 用户,此方法在:navigate:patch导航中不适用。
  • 实现软删除的 Queryable 模块:通过创建Queryable模块,在模型中使用use MyApp.Queryable替换use Ecto.Schema,并创建base_query/0archived_query/0等函数来构建 Ecto 查询,还可以扩展apply_filter函数。
  • 使用前缀和人类可读的对象 ID:使用 UUIDv4 作为模型的主键 ID,将其转换为对象 ID 后更友好且便于调试,利用Ecto.ParameterizedType实现从原始 UUID 到对象 ID 的自动转换,并提供了相关的单元测试。
  • 使用 heex 组件渲染邮件:通过MyApp.MailNotifier模块使用组件来渲染 HTML 邮件,定义了邮件布局和内容,同时明确了纯文本邮件的内容,避免了 Floki 插入过多换行的问题。
    重要细节:
  • MyAppWeb.Layouts中通过title/2函数处理页面标题,根据不同的模板和assigns返回相应的标题。
  • MyApp.Queryable模块中的各种函数用于构建 Ecto 查询,包括base_query/0query/2等,并可扩展apply_filter函数。
  • MyApp.PrefixedUUID模块用于处理前缀和人类可读的对象 ID,包含了编码、解码、自动生成等功能,并提供了单元测试。
  • MyApp.MailNotifier模块中的deliver_confirmation_instructions函数用于发送确认邮件,包含 HTML 和纯文本内容,并通过Mailer.deliver发送邮件。
阅读 8
0 条评论