我正在使用带有脚手架的Cake PHP。我遇到了它生成的代码的问题,并希望看看是否有办法解决它是否应该最终构建自定义视图。
让我们说我有两个模型测试和问题。测试可以有很多问题,而问题只有一个测试。我已经设置了hasMany和belongsTo Associations。
现在,蛋糕为测试创建的脚手架视图在“相关问题”的底部给我一个按钮来创建一个问题。当我点击此按钮时,我会收到问题的“添加”表单,但不会自动选择正确的测试。
无论如何,我可以让按钮将test_id传递给Question表单并自动填充吗?
答案 0 :(得分: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'])
);
?>
所以 - 假设您有权访问当前id
的{{1}},您可以将其作为参数传递给test
控制器(有多种方法可以执行此操作)。< / p>
然后:
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
答案 1 :(得分:0)
如果要将此应用于使用cake bake生成的所有CakePHP项目,可以对CakePHP核心进行一些小的更改以启用此功能,如下所示: https://github.com/srs81/cakephp/commit/7d92c8f676c79185fa6a74ab2070f240c555a2a0
基本上这两个更改会将引用模型/控制器ID和名称附加到“添加”操作,这将在“添加”操作中处理,其中选择了正确的ID。
这对HABTM模型不起作用,但应该适用于其他任何事情。
答案 2 :(得分:-1)
您需要将var $uses = array('Question','Test');
添加到questions_controller.php