我写了一些这样的话:
login('POST', []) ->
....
case Client:check_password(Req:post_param("password")) of
true ->
{redirect, [{controller, "chat"}, {action, "live"}], [{username, Name}, {gender, Gender}]};
....
end.
如何让聊天控制器中的实时动作收到姓名和性别信息? 我写道:
live('GET', [Req]) ->
Name=Req:post_param("username"),
....
{ok, [{username, Name}, {gender, Gender}]}
但它不起作用,任何人都可以帮助我>
答案 0 :(得分:0)
您在重定向中所做的事情很可能不是您想要的。
如果您检查the controller API documentation,您会注意到第二个proplist引用了请求标头,而不是参数({redirect, Location, Headers::proplist()}
)。这意味着您可以像live/2
一样访问Req:header("HEADERNAME")
中的值。
其次,在您的live/2
控制器功能的定义中,您假设您已捕获了一个URL参数(您引用为Req
)。这不会反映在login
控制器功能的重定向中。因此,您可以做的是将live/2
的定义更改为live('GET', [Username, Gender])
,这意味着您必须将其称为/live/a-username/the-users-gender
,然后将重定向更改为{redirect, [{controller, "chat"}, {action, "live"}, {username, Name}, {gender, Gender}]}
。
但是,我建议你改用会话。在控制器上实现before_/1
方法,并确保模块定义包含request和session_id参数(选中the documentation)。现在,您可以使用会话API传递任何与会话相关的值(它还具有清理控制器功能的好处 - 添加第三个参数,并简单区分基于before_/1
结果的请求)。 / p>
例如,您可以拥有:
live('GET', [], undefined) ->
% redirect to the login page
live('GET', [], UserObject) ->
{ok, [{username, UserObject:username()}, {gender, UserObject:gender()}]}.