这是我的控制器(显然没有完成,但为了"做一些魔术",我首先需要让它运行):
public function add($customer_id, $question_set_id, $order_value) {
$customer_id = $this->params['url']['customer_id'];
$question_set_id = $this->params['url']['question_set_id'];
$order_value = $this->params['url']['order_value'];
$possible_answer_model = ClassRegistry::init('PossibleAnswer');
$question_model = ClassRegistry::init('Question');
$order_model = ClassRegistry::init('Order');
$order = $order_model -> find('first', array(
'Order.question_set_id' => $question_set_id,
'Order.value' => $order_value));
$question = $question_model -> find('first', array(
'Question.id' => $order['Order']['question_id']));
$this -> set('question', $question);
if ($question['Question']['kind'] != "o") {
$this -> set('possible_answers', $possible_answer_model -> find('all', array(
'PossibleAnswer.question_id' => $question['Question']['id'])));
}
.
.
.
我得到的是:
警告(2):AnswersController::add()[APP''Controller''AnswersController.php,第10行]缺少参数1
警告(2):AnswersController::add()[APP''Controller''AnswersController.php,第10行]缺少参数2
警告(2):AnswersController::add()[APP''Controller''AnswersController.php,第10行]缺少参数3
我的链接是:
/答案/添加/?customer_id=1&question_set_id=1&order_value=1
链接需要是
/answers/add/1/1/1
以便映射到
AnswersController::add($customer_id, $question_set_id, $order_value)
常规查询参数必须通过控制器内的$this->params
访问,它们不会作为参数传递给操作。
public function add($customer_id=null, $question_set_id=null, $order_value=null) {
....
}
当需要的时候,可能没有传递你需要的参数,你只需要做上面的事情,它就不需要了。
我正在使用自定义路由,这为我解决了问题。
Router::connect('/me/edit/:id', array('controller' => 'users', 'action' => 'edit'),
array('pass' => array('id'), 'id' => '[0-9]+')
);
感谢@david的加入https://stackoverflow.com/a/17989140/1424473.