Skip to content

Commit

Permalink
Restore backwards compatibility with old 2.x in FormHelper.
Browse files Browse the repository at this point in the history
Restore the behavior of the string 'action' option to its former glory.
While we've deprecated this it needs to continue working as it did
before.

Refs #8628
  • Loading branch information
markstory committed May 2, 2016
1 parent ab79ab9 commit ade9d8a
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 1 deletion.
31 changes: 31 additions & 0 deletions lib/Cake/Test/Case/View/Helper/FormHelperTest.php
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -8699,6 +8699,37 @@ public function testCreateNoUrl() {
$this->assertTags($result, $expected); $this->assertTags($result, $expected);
} }


/**
* Test that the action key still uses the model as the implicit controller
* when the url option is undefined. While the action parameter is deprecated
* we need it to continue working for the duration of 2.x
*
* @return void
*/
public function testCreateUrlImpliedController()
{
$restore = error_reporting(E_ALL ^ E_USER_DEPRECATED);
$this->Form->request['controller'] = 'posts';
$result = $this->Form->create('Comment', array(
'action' => 'addComment',
'id' => 'addCommentForm',
'type' => 'POST'
));
$expected = array(
'form' => array(
'action' => '/comments/addComment',
'id' => 'addCommentForm',
'method' => 'post',
'accept-charset' => strtolower(Configure::read('App.encoding'))
),
'div' => array('style' => 'display:none;'),
'input' => array('type' => 'hidden', 'name' => '_method', 'value' => 'POST'),
'/div'
);
$this->assertTags($result, $expected);
error_reporting($restore);
}

/** /**
* Test the onsubmit option for create() * Test the onsubmit option for create()
* *
Expand Down
3 changes: 2 additions & 1 deletion lib/Cake/View/Helper/FormHelper.php
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -382,6 +382,7 @@ public function create($model = null, $options = array()) {
if (isset($options['action'])) { if (isset($options['action'])) {
trigger_error('Using key `action` is deprecated, use `url` directly instead.', E_USER_DEPRECATED); trigger_error('Using key `action` is deprecated, use `url` directly instead.', E_USER_DEPRECATED);
} }

if (is_array($options['url']) && isset($options['url']['action'])) { if (is_array($options['url']) && isset($options['url']['action'])) {
$options['action'] = $options['url']['action']; $options['action'] = $options['url']['action'];
} }
Expand All @@ -393,7 +394,7 @@ public function create($model = null, $options = array()) {


if ($options['action'] === null && $options['url'] === null) { if ($options['action'] === null && $options['url'] === null) {
$options['action'] = $this->request->here(false); $options['action'] = $this->request->here(false);
} elseif (is_array($options['url'])) { } elseif (empty($options['url']) || is_array($options['url'])) {
if (empty($options['url']['controller'])) { if (empty($options['url']['controller'])) {
if (!empty($model)) { if (!empty($model)) {
$options['url']['controller'] = Inflector::underscore(Inflector::pluralize($model)); $options['url']['controller'] = Inflector::underscore(Inflector::pluralize($model));
Expand Down

0 comments on commit ade9d8a

Please sign in to comment.