主要观点:作者在自己的项目中对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/0
和archived_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/0
、query/2
等,并可扩展apply_filter
函数。MyApp.PrefixedUUID
模块用于处理前缀和人类可读的对象 ID,包含了编码、解码、自动生成等功能,并提供了单元测试。MyApp.MailNotifier
模块中的deliver_confirmation_instructions
函数用于发送确认邮件,包含 HTML 和纯文本内容,并通过Mailer.deliver
发送邮件。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。