如何在CakePHP中访问某些GET数据?

时间:2013-10-14 23:32:25

标签: php cakephp cakephp-2.0

我目前正在编写一本地址簿并首次使用框架(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

提前致谢!

3 个答案:

答案 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'));
}