我目前正在编写一本地址簿并首次使用框架(CakePHP)和MVC。不幸的是我遇到了一些麻烦。
我想实现以下目标:
如果网址为
/contacts/view/
我想在列表中显示所有联系人。如果在/ view /之后有一个id,例如
/contacts/view/1
我只想显示与id 1的联系人。(完成与第一种情况不同的视图/设计)
我的ContactsController.php如下
public function view($id = null){
if(!$this->id){
/*
* Show all users
*/
$this->set('mode', 'all');
$this->set('contacts', $this->Contact->find('all'));
} else {
/*
* Show a specific user
*/
$this->set('mode','single');
if(!$this->Contact->findByid($id)){
throw new NotFoundException(__('User not found'));
} else {
$this->set('contact', $this->Contact->findByid($id));
};
}
}
但“$ this-> mode”始终设为“all”。如何检查id是否设置? 我真的想避免“丑陋”的URL方案,比如?id = 1
提前致谢!
答案 0 :(得分:0)
您的代码仅符合if部分,而不是其他部分。使用(!$ id)..
答案 1 :(得分:0)
$ _ GET数据通过URL检索。在CakePHP中,这意味着可以通过该方法的参数访问它。
我随意挑选名字,所以请关注!如果您在访客控制器中并发布到注册方法,则可以像这样访问它
function register($param1, $param2, $param3){
}
这些参数中的每一个都是GET数据,因此URL看起来像
www.example.com/guests/param1/param2/param3
现在问你的问题How can I check whether the id is set or not?
有几种可能性。如果要检查ID是否存在,可以执行类似
的操作$this->Model->set = $param1
if (!$this->Model->exists()) {
throw new NotFoundException(__('Invalid user'));
}
else{
//conduct search
}
或者您可以根据参数是否设置进行搜索
if(isset($param1)){ //param1 is set
$search = $this->Model->find('all','conditions=>array('id' => $param1)));
}
else{
$search = $this->Model->find('all');
}
答案 2 :(得分:0)
您应该只更改条件而不是整个代码块,例如
public function view($id = null){
$conditions = array();
$mode = 'all';
if($id){
$conditions['Contact.id'] = $id;
$mode = 'single';
}
$contacts = $this->Contact->find('all', array('conditions' => $conditions));
$this->set(compact('contacts', 'mode'));
}