2014-12-02 64 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