2014-12-02 83 views
3

我正在写一个应用程序使用PHP的Phalcon框架,我必须实现该功能以允许用户在彼此的墙上写消息。所以使用jQuery我会写:我应该在哪里发送POST请求?

function postMessage() { 
    var message = $("#messageBox").val().trim().replace(/\n/g, '<br/>'); 
    if(message) { 
     $.post("// request handler", {msg: message, wall: {{ user.id }}, 
      writer: {{ session.get('user')['id'] }}) 
      .done(function() { 
       $("#messageBox").val(''); 
       alert("Message posted"); 
      }) 
      .fail(function() { 
       alert("Error posting message, please try again"); 
      }); 
    } 
} 

而且这个脚本将位于页面domain.com/user/foobar

我的问题是(或者说在哪里)应我的请求处理程序是什么。我已经想了一下,问我的朋友,有三个选项上前:(出 domain.com/user/foobar)

  1. 张贴到相同的URL上面的脚本是
  2. 发布到另一个URL哪些路由到 在相同的控制器所选择另一动作1(实施例 domain.com/postmessage。这两种选项1和2是在同一 控制器,但它们是不同的动作)
  3. 投递到一个API网址(例如。api.domain.com)

有些职业选手我想分别为:

  1. 两个选项1和2可以访问会话变量,这样我就可以检查 如果用户登录或没有。使用选项3,我不能,但我可以 (不现实),希望没有人试图滥用系统并没有张贴 消息使用Fiddler或东西被记录。
  2. 选项2比选项1
  3. 清洁了一下选项2和3都提供中央请求处理程序,所以如果我想 实施墙上书写系统在同一消息,我只会 必须复制jQuery代码,并把它放在新的视图或页面。 使用选项1我必须将代码从用户控制器复制和 repaste入控制器为每个新页。

一些缺点我认为是:

  1. 选项2意味着我有更多的路由添加到我的路由器。这使得 路由更加复杂。 (也许慢???)

(例

// Option 1 
$router->add('/user/{id}', 
    array(
     'controller' => 'user', 
     'action'  => 'show' 
    ) 
); 

// Option 2 
$router->add('/user/post/{id}', 
    array(
     'controller' => 'user', 
     'action'  => 'writeMessage' 
    ) 
); 

哪种方式,推荐和使用?

回答

3

需要我会继续定义路线。或者定义一个单一的路由并在发送请求中传递一个额外的参数来挂接到远程过程。

谨慎地关注用户,关闭任何漏洞。考虑添加一个随机数。

感谢,

Ç

3

永远不要假设你所有的用户将善良和聪明,这是人们如何破解的系统。测试一切。

通常1路= 1的动作 如果你还没有张贴任何信息途径,增加一个是要走的路。 路线就像一个简单的“if”测试,它将在几纳秒内完成。

+0

谢谢回答我的问题。虽然你首先做了回答,但我必须给出另一个答案的最佳答案,因为它提供了使用额外参数处理所有POST请求的单一路由的想法,并且还向我介绍了随机数的概念。但是,我也很喜欢你的回答,并且感谢你不要让我陷入期望我的用户无所作为的陷阱。祝你有美好的一天! – Laplace 2014-12-03 18:43:11