Php 在另一个操作中从URL获取ID

Php 在另一个操作中从URL获取ID,php,cakephp,Php,Cakephp,我有三个模型 使用者 团体 订阅 在订阅表中,我有三个字段 身份证 用户id 组id 我想要的是,我想在这里显示每个组的所有订阅者的列表(/groups/viewcourse/id) 组控制器: public function viewcourse($id=NULL) { $this->set('viewcourse', $this->Group->read(NULL,$id)); $this->set('course', $this->Group-

我有三个模型

  • 使用者
  • 团体
  • 订阅
  • 在订阅表中,我有三个字段

  • 身份证
  • 用户id
  • 组id
  • 我想要的是,我想在这里显示每个组的所有订阅者的列表(/groups/viewcourse/id)

    组控制器:

    public function viewcourse($id=NULL)
    {
        $this->set('viewcourse', $this->Group->read(NULL,$id));
        $this->set('course', $this->Group->find('all', array('conditions'=>array('Group.id'=>$id))));
    
    
         $this->set('allnotes', $this->Group->Note->find('all', array(
        'conditions'=>array('Note.group_id' => $id),'order' => array('Note.created DESC'))))
    }
    
    public function subscribers()
    {
    $subscribers = $this->User->Subscription->find('all',array(
      'conditions'=>array(
      'Subscription.group_id'=>26)
      )
     );
    }
    
    //GroupsController
    public function viewcourse($id=NULL)
    {
        //...
        $this->loadModel('Subscription');
        $subscribers = $this->Subscription->getAllByGroupId($id);
        //...
    }
    
    //Subscription model
    public function getAllByGroupId($groupId = null) {
        if(empty($groupId)) return false;
        return $this->findAllByGroupId($groupId);
    }
    
    用户控制器:

    public function viewcourse($id=NULL)
    {
        $this->set('viewcourse', $this->Group->read(NULL,$id));
        $this->set('course', $this->Group->find('all', array('conditions'=>array('Group.id'=>$id))));
    
    
         $this->set('allnotes', $this->Group->Note->find('all', array(
        'conditions'=>array('Note.group_id' => $id),'order' => array('Note.created DESC'))))
    }
    
    public function subscribers()
    {
    $subscribers = $this->User->Subscription->find('all',array(
      'conditions'=>array(
      'Subscription.group_id'=>26)
      )
     );
    }
    
    //GroupsController
    public function viewcourse($id=NULL)
    {
        //...
        $this->loadModel('Subscription');
        $subscribers = $this->Subscription->getAllByGroupId($id);
        //...
    }
    
    //Subscription model
    public function getAllByGroupId($groupId = null) {
        if(empty($groupId)) return false;
        return $this->findAllByGroupId($groupId);
    }
    
    现在在UsersController中,我希望以某种方式从URL检索组Id以将其放置在位置,而不是26,这样我就可以显示订阅该特定组或组26的用户列表

    唯一的办法就是从URL中获取id


    我尝试的是将$this->params['pass'][0]添加到UsersController(订阅者操作),但它不会从viewcourse中获取id,因为它只会从订阅者操作中传递id,该操作为空且没有任何用处。我想要/groups/viewcourse/id的id。

    只需将另一个参数与链接助手一起传递给控制器。 他认为:

    <?php echo $this->Html->link('Subscribers', array('controller'=>'users', 'action'=>'subscribers', 'group'=>$viewcourse['Group']['id'])); ?>
    

    您应该将检索数据库信息的函数放在模型中,而不是控制器中,然后您可以从任何控制器访问它们的逻辑和数据

    示例代码:

    public function viewcourse($id=NULL)
    {
        $this->set('viewcourse', $this->Group->read(NULL,$id));
        $this->set('course', $this->Group->find('all', array('conditions'=>array('Group.id'=>$id))));
    
    
         $this->set('allnotes', $this->Group->Note->find('all', array(
        'conditions'=>array('Note.group_id' => $id),'order' => array('Note.created DESC'))))
    }
    
    public function subscribers()
    {
    $subscribers = $this->User->Subscription->find('all',array(
      'conditions'=>array(
      'Subscription.group_id'=>26)
      )
     );
    }
    
    //GroupsController
    public function viewcourse($id=NULL)
    {
        //...
        $this->loadModel('Subscription');
        $subscribers = $this->Subscription->getAllByGroupId($id);
        //...
    }
    
    //Subscription model
    public function getAllByGroupId($groupId = null) {
        if(empty($groupId)) return false;
        return $this->findAllByGroupId($groupId);
    }
    

    您的视图中是否有用户单击以从viewcourse访问订阅者视图的链接?或者你在做某种自动重定向?是的,有一个订阅按钮。当用户单击它时,它会将用户重定向到subscribers视图,并在subscription表中使用组id添加订阅,但我在其中执行订阅操作的控制器是UsersController,我希望在那里检索值,而不是SubscriptionsController只需将控制器更改为link helper中的用户即可。我更新了我的代码。