【问题标题】:Phoenix session debugging/configurationPhoenix会话调试/配置
【发布时间】:2019-01-13 23:42:06
【问题描述】:

即使是 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: 

为了能够在会话中存储值,我需要做一些额外的配置吗?股票应用程序在浏览器管道中获取会话,所以我假设没有更多事情要做,但也许我错了?

【问题讨论】:

  • conn 是不可变的。试试conn = put_session(conn, :franch, "foo")
  • 呃。谢谢!

标签: elixir phoenix-framework


【解决方案1】:

由于 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,而是返回一个新的 Plug.Conn,它与旧的基本相同,除了新的键/值对。

要让文本正确显示,您需要将 conn 分配给方法的输出

 conn = put_session(conn, key, value)

【讨论】:

    猜你喜欢
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-04-26
    相关资源
    最近更新 更多