凤凰专场debugging/configuration
Phoenix session debugging/configuration
即使是 Phoenix 中最基本的会话操作,我也遇到了麻烦。例如,如果我生成股票 Phoenix (1.4) 应用程序,我所做的唯一更改是 page_controller.ex,其索引操作现在如下所示:
def index(conn, _params) do
put_session(conn, :franch, "foo")
text(conn, "session is: #{get_session(conn, :franch)}")
end
当我启动服务器并导航到该页面时,我看到:
session is:
我是否需要做一些额外的配置才能在会话中存储值? Stock 应用程序在浏览器管道中获取会话,所以我假设没有更多事情要做,但也许我错了?
由于 Elixir 是一种函数式编程语言,因此变量是不可变的。这意味着您保证在方法调用前后具有相同的值,除非您重新分配变量:
foo = "Hello"
AnyModule.anyMethod(foo)
foo # You are guaranteed that foo still points to the value "Hello"
让变量 foo 引用当前分配给它的值以外的某个值的唯一方法是重新分配它:
foo = "Hello"
foo = MyModule.addThere(foo)
foo # "Hello There"
因此,put_session(conn, key, value)
无法修改传入的参数 conn
而是 returns 一个新的 Plug.Conn,它与旧参数在本质上是相同的,除了新的 key/value 对。
要使文本正确显示,您需要将 conn 分配给方法的输出
conn = put_session(conn, key, value)
即使是 Phoenix 中最基本的会话操作,我也遇到了麻烦。例如,如果我生成股票 Phoenix (1.4) 应用程序,我所做的唯一更改是 page_controller.ex,其索引操作现在如下所示:
def index(conn, _params) do
put_session(conn, :franch, "foo")
text(conn, "session is: #{get_session(conn, :franch)}")
end
当我启动服务器并导航到该页面时,我看到:
session is:
我是否需要做一些额外的配置才能在会话中存储值? Stock 应用程序在浏览器管道中获取会话,所以我假设没有更多事情要做,但也许我错了?
由于 Elixir 是一种函数式编程语言,因此变量是不可变的。这意味着您保证在方法调用前后具有相同的值,除非您重新分配变量:
foo = "Hello"
AnyModule.anyMethod(foo)
foo # You are guaranteed that foo still points to the value "Hello"
让变量 foo 引用当前分配给它的值以外的某个值的唯一方法是重新分配它:
foo = "Hello"
foo = MyModule.addThere(foo)
foo # "Hello There"
因此,put_session(conn, key, value)
无法修改传入的参数 conn
而是 returns 一个新的 Plug.Conn,它与旧参数在本质上是相同的,除了新的 key/value 对。
要使文本正确显示,您需要将 conn 分配给方法的输出
conn = put_session(conn, key, value)