16 安装 Phoenix,产出新专案

尽管我们的游戏还是有漏洞,写法也还不太满意,
因为篇幅的关西,还是先记着进到下个阶段好了。

安装 phoenix

phoenix 在前几天升到 1.6 版了,
我们在这里就直接用新的

phoenix 官网
里面的 guide 里面有完整的安装教学,
另外要注意的是,我们这一次不会使用资料库,
所以可以跳过安装 postgresql 的部分

先装最新的 phoenix 进去电脑的 hex package

终端机

mix archive.install hex phx_new

在建立新的专案之前,我们可以先看看有什麽选项可以用

mix help phx.new

我们这次要使用的是 --no-ecto

mix phx.new card --no-ecto

card 是这个专案名称,可以改成你想要的
送出就开始帮我们产生新的 phoenix 专案

在遇到 Fetch and install dependencies? [Yn] 的时候选Y

完成之後所有的东西都会装在 card 资料夹里
我们 cd 进去 card 资料夹後

执行

mix phx.server

开启浏览器 打开 http://localhost:4000
就可以看到 phoenix 的预览画面。

https://ithelp.ithome.com.tw/upload/images/20210930/20141054JgErEQWSbM.png

来把它换掉吧 XD

新增一个页面

每次向这个 phoenix 网页服务器送出要求的时候
都会先到 router.ex 这个档案

  scope "/", CardWeb do
    pipe_through :browser

    get "/", PageController, :index
  end

在这一区有看到,我们把目前连到 "/" 的要求都导到 PageController 的 :index 方法
这个写法是传统的 MVC 写法,这边应该是没空题,不过有用过类似网页框架的话应该会满快就懂的。

没关系 我们这次直接使用新的 liveview 做法,两者之间没有太大的关联。

我们把

  get "/", PageController, :index

改成

  live "/", PageLive.Index, :index

再去网页看看
https://ithelp.ithome.com.tw/upload/images/20210930/20141054Ym3kOES2If.png

会看到他抱怨 module CardWeb.PageLive.Index is not available
我们就帮他建一个
我们在lib/card_web/底下,新增一个叫 live 的资料夹,
并在底下再新增 page_live 资料夹
路径变成 lib/card_web/live/page_live
再给他一个 index.ex 档案

按照他想要的在里面新增 CardWeb.PageLive.Index module

defmodule CardWeb.PageLive.Index do

end

存档在看页面就发现他抱怨的东西改成只有 function CardWeb.PageLive.Index.live/0 is undefined

因为我们在 router 用 live 来连到这个 module
自然他会在这里面找 liveview 的东西,

defmodule CardWeb.PageLive.Index do
  use CardWeb, :live_view

end

使用 use CardWeb, :live_view 帮他加上 liveview 的方法之後,
抱怨的东西变成 render/1 was not implemented

https://ithelp.ithome.com.tw/upload/images/20210930/201410544AiVBhd0Se.png

下面还给我们范例,我还不复制贴上,

好拉改一下里面的字

defmodule CardWeb.PageLive.Index do
  use CardWeb, :live_view

  def render(assigns) do
    ~H"""
    我的第一个烘培机
    """
  end
end

https://ithelp.ithome.com.tw/upload/images/20210930/201410547g3VIv0Cba.png
就写好了,但这样好像没什麽意义
我们明天来做的互动的按钮之类的来练一下 liveview 整个流程


<<:  【Day 15】浅谈 Django model

>>:  【从零开始的Swift开发心路历程-Day18】简易订单系统Part2

第 1 天 大闲人降生

前言 常言道:「东汉末年分三国,烽火连天不休...」嗯?怎麽有股很想唱的感觉?总之三国就可以很火了,...

Day 30-完赛结论,所有公有云的问题,我一率建议 Terraform

本篇是 30 天铁人赛的最後一篇,本篇做个小节与心得 课程内容与代码会放在 Github 上: ht...

Day 30--Retrofit 登入练习

前置作业 build.gradle dependencies记得加入使用retrofit2 impl...

Day 9:1046. Last Stone Weight

今日题目 题目连结:1046. Last Stone Weight 题目主题:Array, Heap...

Day 10 state & props -1

哇喔~第 10 天~ 破个位数了! 今天来介绍一下前面提到的 props & state 我...