2012-02-23 3 views
0

Я пытаюсь проверить, может ли пользователь зарегистрироваться для курса. У меня есть 2 вопроса:CakePHP: разрешить пользователю регистрироваться на курс

  1. Я иду об этом в правильном направлении?
  2. Функция моего ученика :: isSignedUpForCourse() не возвращает правильный курс (он фактически возвращает 2 курса). Как я могу отправить курс, который используется в модели курса, где он называется (курс :: CanSignupForCourse)?

Спасибо!

// Course Model 
public function isComplete() { 
    $course = $this->read(null); 

    if($course['Course']['completed'] != 0) { 
      return true; 
    } 

    return false; 
} 

public function canSignupForCourse($studentId) { 
    $this->Student->id = $studentId; 

    if (!$this->Student->exists()) { 
      throw new NotFoundException(__('Invalid student')); 
    }    

    $this->Student->isSignedUpForCourse(); 
    //this will ultimately be: 
    //if(! $this->Student->isSignedUpForCourse && $this->isApproved()) { 
     // return 
    } 
} 

// Course Controller: 
public function signup($id = null) { 
    $this->Course->id = $id; 
    if (!$this->Course->exists()) { 
      throw new NotFoundException(__('Invalid course')); 
    }    

    if($this->Course->canSignupForCourse($this->Auth->user('id'))) { 
      // can signup 
    } 
} 

// Student Model 
public function isSignedUpForCourse() { 
    print_r($this->read()); 
} 

ответ

0

В вашей модели вы имеете в виду модель. Вам нужно только обратиться к $ this, а не $ this-> Student.

public function canSignupForCourse($studentId) { 
    $this->Student->id = $studentId; 

должен быть

public function canSignupForCourse($studentId) { 
    $this->id = $studentId; 

UPDATE

еще хуже, вы не можете перегружать модель с другой моделью, как это. Вы не можете вызвать модель изнутри другой модели без создания экземпляра модели. Вы должны добавить это, прежде чем ссылаться на модель студента:

App :: uses ('Student', 'Model'); $ student = new Student(); $ student-> id = $ student_id;

Однако дизайн ваших функций должен быть обновлен. Вероятно, вы должны передать идентификатор студента и идентификатор курса до $this->Student->isSignedUpForCourse();. То, как у вас есть, теперь делает код трудным для чтения и понимания. Я хотел бы изменить функцию isSignedUpForCourse к этому:

public function isSignedUpForCourse($student_id = null, $course_id = null) { 
    if (!$student_id or !$course_id) { 
     return false; 
    } 
    // access the model to determine course/student 
} 

с амбулаторным зная отношения между курсом/студентом (хотя я бы предположить, что это HABTM), я не могу обеспечить правильный код обнаружения курса/студента. Но я думаю, вы понимаете.

+0

Это модель курса. – execv

+0

Смотрите мое обновление выше. –

Смежные вопросы