0

我正在使用带有脚手架的 Cake PHP。我对它生成的代码有疑问,想看看是否有办法解决我是否应该最终构建自定义视图。

假设我有两个模型测试和问题。测试可以有很多问题,一个问题只有一个测试。我已经设置了 hasMany 和 belongsTo 关联。

现在,cake 为测试创建的脚手架视图在“相关问题”底部为我提供了一个按钮来创建问题。当我单击此按钮时,我会看到问题的“添加”表单,但不会自动选择正确的测试。

无论如何我可以让按钮将 test_id 传递到 Question 表单并自动填充?

4

3 回答 3

0

我知道你认为这可能如何工作;但是 Cake 不知道你想要那种开箱即用的行为。

您需要调整Question Add方法,或创建一个新方法:

示例代码:

// action: tests/view/1 (viewing test 1, and all related questions)
// create a link containing the ID of the current test as a param
<?php echo $this->Html->link('Add Question to Test', 
                                          array('controller'=>'questions',
                                                'action' => 'add_question',
                                                $test['Test']['id'])
                             );
?>

所以 - 假设你可以访问idcurrent test,你可以将它作为参数传递给你的questions控制器(有几种方法可以做到这一点)。

然后:

// view - questions/add_question/1
<h1>Adding A Question to Test 1</h1>
<?php 
// create your add question form

$this->Form->input('test_id', array('type'=>'hidden', 
                                  'value' => $this->params['pass'][0])); 
// create a hidden field with the value of the first passed param (the test id)

然后在你的控制器中,test_id已经设置好了,所以当你保存问题时,它会与适当的test_id

于 2012-05-30T21:52:01.270 回答
0

如果您想将此应用到使用 cake bake 生成的所有 CakePHP 项目,您可以对 CakePHP 核心进行一些小的更改以启用此功能,如下所示: https ://github.com/srs81/cakephp/commit/ 7d92c8f676c79185fa6a74ab2070f240c555a2a0

基本上,这两个更改将引用模型/控制器 ID 和名称附加到“添加”操作,这在选择正确 ID 的“添加”操作中处理。

这不适用于 HABTM 模型,但应该适用于其他任何模型。

于 2012-05-30T22:21:43.133 回答
-1

您需要添加var $uses = array('Question','Test');到 questions_controller.php

于 2012-05-30T20:32:36.317 回答