我目前正在构建一个网络应用程序,该应用程序分别具有两个模型,分别是捐赠者和捐赠模型。它具有多个用户角色。当员工用户首先注册捐助者时,我希望他被重定向到另一种表格,这使他可以填写捐赠的详细信息(一旦第一个捐款成功,捐赠者就会注册)。
firs,我应该创建一个捐赠控制器,从中我将使用以下方式重定向用户:
return $this->redirect(array('controller'=>'donations','action'=>'add'));
要使上述工作,它要求我在这样的会话中保存新注册的捐赠者ID:
$this->Session->write('id', $this->Donor->id);
因此,用户被重定向到URL中的"捐赠/添加",这很好。但是我认为这有一些缺陷。我在徘徊是否应该在称为" add_donation"的捐赠者控制器内创建另一个动作,该操作将具有各自的"视图"。这个想法是能够形成类似的网址:"捐赠者/add_donation/4'(4是donor_id!)此URL遵循此结构:"控制器/操作/ID'
如果有人可以阐明最佳实践,或描述我的解决方案的任何警告(前者,使用会话等),请帮助兄弟!对您深感欠款!预先感谢!
保存数据后,您可以在donorsController中执行此操作:
$this->redirect(array(
'controller' => 'donations',
'action' => 'add',
$this->Donor->getLastInsertId()
));
无需返回重定向,这是没有用的,因为您被重定向。请注意,我们将最后一个插入的记录ID作为重定向中的参数传递。控制器调用的重定向方法默认情况
cakephp3:关于在3.0中更改该默认行为的讨论。看起来像Cakephp 3.0中redirect()默认不再退出()。
DonationsController:
public function add($donorId = null) {
// Get the donor to display it if you like to
if ($this->request->is('post')) {
$this->request->data['Donation']['donor_id'] = $donorId;
// Save code here
}
}
我不会在此处使用会话,特别是不是通过将其保存到一个名为" ID"的完全有意义且通用的值中。如果我完全使用有意义的名称和名称空间,例如donor.lastinsertid作为会话密钥。
,如果它们相关的话,并不总是很清楚在哪里放置东西,但是经验法则应该进入它们所属的域,这在这种情况下很明显。
编辑:如果其他人需要它,请在此处保留此编辑 - 它不符合Asker的使用情况。如果您在此阶段登录了用户,请修改add
函数以检查使用的用户ID是否与登录中的一个相同:
DonationsController:
public function add($donorId = null) {
// Get the donor to display it if you like to
if ($this->request->is('post')) {
if ($this->Auth->user('id') != $donorId) {
throw new InvalidArgumentException();
}
$this->request->data['Donation']['donor_id'] = $donorId;
// Save code here
}
}
您也可以使用更多的模型使用相同的控制器。或者,您也可以向其他Ajax和Morover的控制器询问JSON的响应。