我正在使用Phalcon框架为PHP编写一个应用程序,我必须实现该功能以允许用户在彼此的墙上编写消息。所以对于JQuery,我会写:
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
我的问题是我的请求处理程序应该是什么(或者更确切地说在哪里(。我想了一下,问了我的朋友,想出了三个选择:
- 发布到上述脚本所在的同一 url(例如。domain.com/user/foobar(
- 发布到另一个网址,该网址将路由到该网址与选项 1 相同的控制器中的另一个操作(例如。domain.com/postmessage。选项 1 和 2 都在同一控制器,但它们是不同的操作(
- 发布到 API 网址(例如 api.domain.com(
我想到的一些优点是:
- 选项 1 和 2 都可以访问会话变量,所以我可以检查用户是否已登录。对于选项 3,我不能,但我可以(不切实际地(希望没有人试图滥用系统和帖子与提琴手或其他东西的消息没有登录。 选项
- 2 比选项 1 干净一些
- 选项 2 和 3 都提供中央请求处理程序,所以如果我愿意要在墙上书写系统上实现相同的消息,我只会必须复制 Jquery 代码并将其放在新的视图或页面中。使用选项 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'
)
);
(
推荐和使用哪种方式?
我会根据需要继续定义路由。 或者定义单个路由,并在 post 请求中传递一个额外的参数,该参数挂钩到远程过程。
在用户关注的地方要谨慎,并关闭任何漏洞。 考虑添加一个随机数。
谢谢
C
永远不要假设你的所有用户都是善良和聪明的,这就是人们破坏系统的方式。测试一切。
通常:1 条路线 = 1 个动作如果您没有任何发布消息的途径,那么添加一个是要走的路。路由就像一个简单的"如果"测试,它将在几纳秒内完成。