cake php在编辑时自动选择外键

时间:2012-05-30 19:39:17

标签: cakephp cakephp-appmodel cakephp-bake

我正在使用带有脚手架的Cake PHP。我遇到了它生成的代码的问题,并希望看看是否有办法解决它是否应该最终构建自定义视图。

让我们说我有两个模型测试和问题。测试可以有很多问题,而问题只有一个测试。我已经设置了hasMany和belongsTo Associations。

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

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

3 个答案:

答案 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