注册用户

在开始敲代码前,我们先确认一下,TvRecipe 项目中,用户有哪些数据需要存储,这些数据要加上什么限制,如果超出限制,要报告什么错误。

  1. username(用户名)

  2. email(邮箱)

  3. password(密码)

好了,接下来准备写代码。

样板命令

还记得在 Phoenix 初探一章里,我们是如何添加的帮助页面吗?

  1. web/router.ex 文件中添加路由

  2. 添加控制器文件 help_controller.ex

  3. 添加视图文件 help_view.ex

  4. 添加模板文件 index.html.eex

但这样的手动添加过程太麻烦,还容易出错,应该有便捷的方法。

是的,Phoenix 提供了一系列的 mix 工具包。我们要接触的这个是 mix phx.gen.html

请在命令行窗口下切换到 tv_recipe 目录,然后执行 mix phx.gen.html 命令:

$ cd tv_recipe
$ mix phx.gen.html Users User users username:string:unique email:string:unique password:string

执行命令后的输出如下:

* creating lib/tv_recipe_web/controllers/user_controller.ex
* creating lib/tv_recipe_web/templates/user/edit.html.eex
* creating lib/tv_recipe_web/templates/user/form.html.eex
* creating lib/tv_recipe_web/templates/user/index.html.eex
* creating lib/tv_recipe_web/templates/user/new.html.eex
* creating lib/tv_recipe_web/templates/user/show.html.eex
* creating lib/tv_recipe_web/views/user_view.ex
* creating test/lib/tv_recipe_web/controllers/user_controller_test.exs
* creating lib/tv_recipe/users/user.ex
* creating priv/repo/migrations/20170123145857_create_user.exs
* creating lib/tv_recipe/users.ex
* injecting lib/tv_recipe/users.ex
* creating test/lib/tv_recipe/users_test.exs
* injecting test/tv_recipe/users_test.exs

Add the resource to your browser scope in lib/tv_recipe_web/router.ex:

    resources "/users", UserController

Remember to update your repository by running migrations:

    $ mix ecto.migrate

命令生成的文件很多,我们来看最底下的两段提示:

  1. 添加 resources "/users", UserControllerweb/router.ex 文件中

  2. 命令行下执行 mix ecto.migrate

前几章里,我们在添加帮助页面时,给 web/router.ex 文件添加过一行代码:

get "/help", HelpController, :index

这里,resources "/users", UserController 起的是类似作用。我们可以不厌其烦地写成如下:

get "/users", UserController, :index
get "/users/:id/edit", UserController, :edit
get "/users/new", UserController, :new
get "/users/:id", UserController, :show
post "/users", UserController, :create
patch "/users/:id", UserController, :update
put "/users/:id", UserController, :update
delete "/users/:id", UserController, :delete

可是,谁不会厌烦呢?所以 Phoenix 提供了 resources 这一便捷方法。

再来说说 mix ecto.migrate

目前为止,我们还没有真正操作过数据库。可我们的用户数据必须存储在数据库中,我们难道要自己手动执行 SQL 语句来创建用户表格?

不不不,我们只要运行 mix ecto.migrate,一切便都妥当了:

$ mix ecto.migrate
Compiling 15 files (.ex)
Generated tv_recipe app

11:08:12.056 [info]  == Running TvRecipe.Repo.Migrations.CreateUser.change/0 forward

11:08:12.057 [info]  create table users

11:08:12.065 [info]  create index users_username_index

11:08:12.066 [info]  create index users_email_index

11:08:12.067 [info]  == Migrated in 0.0s

操作完上述两步后,因为某些编辑器可能导致的代码重载问题,你需要重启 Phoenix 服务器 - 按两次 Ctrl-C,然后重新执行 mix phx.server

之后在浏览器中打开网址 http://localhost:4000/users/new

有了。是不是很惊讶?我们用 mix phx.gen.html 命令生成的样板,功能已经很完善:增删改查功能全都有了。我们需要的,只是在样板基础上做点修改。

接下来几章,我们将一步步完成本章开头列出的限制条件。

上一章:Menu 项目规划 下一章:username 必填

最后更新于