1

抱歉,如果以前有人问过这个问题,我已经进行了搜索,但没有找到任何具体的内容。这很有帮助http://bakery.cakephp.org/articles/Auzigog/2008/12/29/where-should-my-code-go

我正在尝试修复我继承的一些代码,我发现您可以更改任何人的密码,只需更改 URL:

/site/user/changepassword/(插入 id)

然后我放置在用户控制器中,请原谅我的伪代码:

if(session.user_id == id_from_link)
   view changepasswordform(id_from_link)
else
   warn_and_redirect();

我认为这是在正确的地方做正确的事吗?

现在在视图中我找到这样的代码:

if(user_type is admin)
 echo admin options
if(user_type is user)
 echo user options

现在理想情况下不应该是 View 只是具有:

echo options

然后控制器有:

switch(user_type)
  case: admin
     options = admin stuff
  case: user
     options = user stuff

等等?还是应该在用户模型中?

4

2 回答 2

1

只需从 url 中删除 id 参数...并在控制器操作的顶部添加以下内容:

function changepassword(){
   $id = $this->Auth->user('id');
   ....
}

现在密码只会在当前登录的用户上更改。请务必进行常规检查以确保 $id 不为空。

于 2013-02-01T12:08:43.750 回答
0

视图应该有效地打印语句:

<title><?=$this->data['title']?></title>
...
<h1><?=$this->data['main_menu']?></h1>

控制器应该准备视图/处理请求:

if(loggedInUser) {
    $this->data['title'] = model->getTitle(userID);
    $this->redirect(/somepage);
}
else {
    $this->redirect(/loginpage);
}

模型应该有:

function getTitle($userID) {
   this->doStuff($userID);
   $title = this->talkToDB($userID);
   return $title;
}
于 2013-02-07T12:47:06.763 回答