0

我目前正在编写地址簿并第一次使用框架(CakePHP)和 MVC。不幸的是,我遇到了一些麻烦。

我想实现以下几点:

如果 URL 是

/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 是否设置?我真的很想避免像 ?id=1 这样的“丑陋”的 URL 方案

提前致谢!

4

3 回答 3

0

您的代码仅满足 if 部分,而不满足 else 部分。使用 (!$id)..

于 2013-10-14T23:38:45.270 回答
0

You should only change the conditions not the whole block of code like

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'));
}
于 2013-10-15T05:38:48.417 回答
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');
}
于 2013-10-15T04:29:04.117 回答