mirror of
https://github.com/kamilwylegala/cakephp2-php8.git
synced 2025-01-31 09:06:17 +00:00
Merge branch '2.0-post-method' into 2.0
This commit is contained in:
commit
b0a600f925
7 changed files with 164 additions and 4 deletions
|
@ -115,6 +115,9 @@
|
|||
}
|
||||
|
||||
public function <?php echo $admin; ?>delete($id = null) {
|
||||
if (!$this->request->is('post')) {
|
||||
throw new MethodNotAllowedException();
|
||||
}
|
||||
if (!$id) {
|
||||
<?php if ($wannaUseSession): ?>
|
||||
$this->Session->setFlash(__('Invalid id for <?php echo strtolower($singularHumanName); ?>'));
|
||||
|
|
|
@ -47,7 +47,7 @@
|
|||
<ul>
|
||||
|
||||
<?php if (strpos($action, 'add') === false): ?>
|
||||
<li><?php echo "<?php echo \$this->Html->link(__('Delete'), array('action' => 'delete', \$this->Form->value('{$modelClass}.{$primaryKey}')), null, sprintf(__('Are you sure you want to delete # %s?'), \$this->Form->value('{$modelClass}.{$primaryKey}'))); ?>";?></li>
|
||||
<li><?php echo "<?php echo \$this->Form->postLink(__('Delete'), array('action' => 'delete', \$this->Form->value('{$modelClass}.{$primaryKey}')), null, sprintf(__('Are you sure you want to delete # %s?'), \$this->Form->value('{$modelClass}.{$primaryKey}'))); ?>";?></li>
|
||||
<?php endif;?>
|
||||
<li><?php echo "<?php echo \$this->Html->link(__('List " . $pluralHumanName . "'), array('action' => 'index'));?>";?></li>
|
||||
<?php
|
||||
|
|
|
@ -55,7 +55,7 @@
|
|||
echo "\t\t<td class=\"actions\">\n";
|
||||
echo "\t\t\t<?php echo \$this->Html->link(__('View'), array('action' => 'view', \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?>\n";
|
||||
echo "\t\t\t<?php echo \$this->Html->link(__('Edit'), array('action' => 'edit', \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?>\n";
|
||||
echo "\t\t\t<?php echo \$this->Html->link(__('Delete'), array('action' => 'delete', \${$singularVar}['{$modelClass}']['{$primaryKey}']), null, sprintf(__('Are you sure you want to delete # %s?'), \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?>\n";
|
||||
echo "\t\t\t<?php echo \$this->Form->postLink(__('Delete'), array('action' => 'delete', \${$singularVar}['{$modelClass}']['{$primaryKey}']), null, sprintf(__('Are you sure you want to delete # %s?'), \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?>\n";
|
||||
echo "\t\t</td>\n";
|
||||
echo "\t</tr>\n";
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ foreach ($fields as $field) {
|
|||
<ul>
|
||||
<?php
|
||||
echo "\t\t<li><?php echo \$this->Html->link(__('Edit " . $singularHumanName ."'), array('action' => 'edit', \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?> </li>\n";
|
||||
echo "\t\t<li><?php echo \$this->Html->link(__('Delete " . $singularHumanName . "'), array('action' => 'delete', \${$singularVar}['{$modelClass}']['{$primaryKey}']), null, sprintf(__('Are you sure you want to delete # %s?'), \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?> </li>\n";
|
||||
echo "\t\t<li><?php echo \$this->Form->postLink(__('Delete " . $singularHumanName . "'), array('action' => 'delete', \${$singularVar}['{$modelClass}']['{$primaryKey}']), null, sprintf(__('Are you sure you want to delete # %s?'), \${$singularVar}['{$modelClass}']['{$primaryKey}'])); ?> </li>\n";
|
||||
echo "\t\t<li><?php echo \$this->Html->link(__('List " . $pluralHumanName . "'), array('action' => 'index')); ?> </li>\n";
|
||||
echo "\t\t<li><?php echo \$this->Html->link(__('New " . $singularHumanName . "'), array('action' => 'add')); ?> </li>\n";
|
||||
|
||||
|
@ -129,7 +129,7 @@ echo "\t<?php
|
|||
echo "\t\t\t<td class=\"actions\">\n";
|
||||
echo "\t\t\t\t<?php echo \$this->Html->link(__('View'), array('controller' => '{$details['controller']}', 'action' => 'view', \${$otherSingularVar}['{$details['primaryKey']}'])); ?>\n";
|
||||
echo "\t\t\t\t<?php echo \$this->Html->link(__('Edit'), array('controller' => '{$details['controller']}', 'action' => 'edit', \${$otherSingularVar}['{$details['primaryKey']}'])); ?>\n";
|
||||
echo "\t\t\t\t<?php echo \$this->Html->link(__('Delete'), array('controller' => '{$details['controller']}', 'action' => 'delete', \${$otherSingularVar}['{$details['primaryKey']}']), null, sprintf(__('Are you sure you want to delete # %s?'), \${$otherSingularVar}['{$details['primaryKey']}'])); ?>\n";
|
||||
echo "\t\t\t\t<?php echo \$this->Form->postLink(__('Delete'), array('controller' => '{$details['controller']}', 'action' => 'delete', \${$otherSingularVar}['{$details['primaryKey']}']), null, sprintf(__('Are you sure you want to delete # %s?'), \${$otherSingularVar}['{$details['primaryKey']}'])); ?>\n";
|
||||
echo "\t\t\t</td>\n";
|
||||
echo "\t\t</tr>\n";
|
||||
|
||||
|
|
|
@ -99,6 +99,26 @@ class NotFoundException extends RuntimeException {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents an HTTP 405 error.
|
||||
*
|
||||
* @package cake.libs
|
||||
*/
|
||||
class MethodNotAllowedException extends RuntimeException {
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param string $message If no message is given 'Method Not Allowed' will be the message
|
||||
* @param string $code Status code, defaults to 401
|
||||
*/
|
||||
public function __construct($message = null, $code = 405) {
|
||||
if (empty($message)) {
|
||||
$message = 'Method Not Allowed';
|
||||
}
|
||||
parent::__construct($message, $code);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Represents an HTTP 500 error.
|
||||
*
|
||||
|
|
|
@ -1268,6 +1268,81 @@ class FormHelper extends AppHelper {
|
|||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a `<button>` tag with `<form>` using POST method.
|
||||
*
|
||||
* This method creates an element <form>. So do not use this method in some opened form.
|
||||
*
|
||||
* ### Options:
|
||||
*
|
||||
* - `data` - Array with key/value to pass in input hidden
|
||||
* - Other options is the same of button method.
|
||||
*
|
||||
* @param string $title The button's caption. Not automatically HTML encoded
|
||||
* @param mixed $url URL as string or array
|
||||
* @param array $options Array of options and HTML attributes.
|
||||
* @return string A HTML button tag.
|
||||
*/
|
||||
public function postButton($title, $url, $options = array()) {
|
||||
$out = $this->create(false, array('id' => false, 'url' => $url, 'style' => 'display:none;'));
|
||||
if (isset($options['data']) && is_array($options['data'])) {
|
||||
foreach ($options['data'] as $key => $value) {
|
||||
$out .= $this->hidden($key, array('value' => $value, 'id' => false));
|
||||
}
|
||||
unset($options['data']);
|
||||
}
|
||||
$out .= $this->button($title, $options);
|
||||
$out .= $this->end();
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates an HTML link, but access the url using method POST. Requires javascript enabled in browser.
|
||||
*
|
||||
* This method creates an element <form>. So do not use this method in some opened form.
|
||||
*
|
||||
* ### Options:
|
||||
*
|
||||
* - `data` - Array with key/value to pass in input hidden
|
||||
* - Other options is the same of HtmlHelper::link() method.
|
||||
* - The option `onclick` will be replaced.
|
||||
*
|
||||
* @param string $title The content to be wrapped by <a> tags.
|
||||
* @param mixed $url Cake-relative URL or array of URL parameters, or external URL (starts with http://)
|
||||
* @param array $options Array of HTML attributes.
|
||||
* @param string $confirmMessage JavaScript confirmation message.
|
||||
* @return string An `<a />` element.
|
||||
*/
|
||||
public function postLink($title, $url = null, $options = array(), $confirmMessage = false) {
|
||||
if (!empty($options['confirm'])) {
|
||||
$confirmMessage = $options['confirm'];
|
||||
unset($options['confirm']);
|
||||
}
|
||||
|
||||
$formName = uniqid('post_');
|
||||
$out = $this->create(false, array('url' => $url, 'name' => $formName, 'id' => $formName, 'style' => 'display:none;'));
|
||||
if (isset($options['data']) && is_array($options['data'])) {
|
||||
foreach ($options['data'] as $key => $value) {
|
||||
$out .= $this->hidden($key, array('value' => $value, 'id' => false));
|
||||
}
|
||||
unset($options['data']);
|
||||
}
|
||||
$out .= $this->end();
|
||||
|
||||
$url = '#';
|
||||
$onClick = 'document.' . $formName . '.submit();';
|
||||
if ($confirmMessage) {
|
||||
$confirmMessage = str_replace(array("'", '"'), array("\'", '\"'), $confirmMessage);
|
||||
$options['onclick'] = "if (confirm('{$confirmMessage}')) { {$onClick} }";
|
||||
} else {
|
||||
$options['onclick'] = $onClick;
|
||||
}
|
||||
$options['onclick'] .= ' event.returnValue = false; return false;';
|
||||
|
||||
$out .= $this->Html->link($title, $url, $options);
|
||||
return $out;
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a submit button element. This method will generate `<input />` elements that
|
||||
* can be used to submit, and reset forms by using $options. image submits can be created by supplying an
|
||||
|
|
|
@ -5197,6 +5197,68 @@ class FormHelperTest extends CakeTestCase {
|
|||
$this->assertNoPattern('/\&039/', $result);
|
||||
}
|
||||
|
||||
/**
|
||||
* testPostButton method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testPostButton() {
|
||||
$result = $this->Form->postButton('Hi', '/controller/action');
|
||||
$this->assertTags($result, array(
|
||||
'form' => array('method' => 'post', 'action' => '/controller/action', 'accept-charset' => 'utf-8', 'style' => 'display:none;'),
|
||||
'div' => array('style' => 'display:none;'),
|
||||
'input' => array('type' => 'hidden', 'name' => '_method', 'value' => 'POST'),
|
||||
'/div',
|
||||
'button' => array('type' => 'submit'),
|
||||
'Hi',
|
||||
'/button',
|
||||
'/form'
|
||||
));
|
||||
|
||||
$result = $this->Form->postButton('Send', '/', array('data' => array('extra' => 'value')));
|
||||
$this->assertTrue(strpos($result, '<input type="hidden" name="data[extra]" value="value" />') !== false);
|
||||
}
|
||||
|
||||
/**
|
||||
* testPostLink method
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function testPostLink() {
|
||||
$result = $this->Form->postLink('Delete', '/posts/delete/1');
|
||||
$this->assertTags($result, array(
|
||||
'form' => array(
|
||||
'method' => 'post', 'action' => '/posts/delete/1', 'accept-charset' => 'utf-8',
|
||||
'name' => 'preg:/post_\w+/', 'id' => 'preg:/post_\w+/', 'style' => 'display:none;'
|
||||
),
|
||||
'div' => array('style' => 'display:none;'),
|
||||
'input' => array('type' => 'hidden', 'name' => '_method', 'value' => 'POST'),
|
||||
'/div',
|
||||
'/form',
|
||||
'a' => array('href' => '#', 'onclick' => 'preg:/document\.post_\w+\.submit\(\); event\.returnValue = false; return false;/'),
|
||||
'Delete',
|
||||
'/a'
|
||||
));
|
||||
|
||||
$result = $this->Form->postLink('Delete', '/posts/delete/1', array(), 'Confirm?');
|
||||
$this->assertTags($result, array(
|
||||
'form' => array(
|
||||
'method' => 'post', 'action' => '/posts/delete/1', 'accept-charset' => 'utf-8',
|
||||
'name' => 'preg:/post_\w+/', 'id' => 'preg:/post_\w+/', 'style' => 'display:none;'
|
||||
),
|
||||
'div' => array('style' => 'display:none;'),
|
||||
'input' => array('type' => 'hidden', 'name' => '_method', 'value' => 'POST'),
|
||||
'/div',
|
||||
'/form',
|
||||
'a' => array('href' => '#', 'onclick' => 'preg:/if \(confirm\('Confirm\?'\)\) \{ document\.post_\w+\.submit\(\); \} event\.returnValue = false; return false;/'),
|
||||
'Delete',
|
||||
'/a'
|
||||
));
|
||||
|
||||
$result = $this->Form->postLink('Delete', '/posts/delete', array('data' => array('id' => 1)));
|
||||
$this->assertTrue(strpos($result, '<input type="hidden" name="data[id]" value="1" />') !== false);
|
||||
}
|
||||
|
||||
/**
|
||||
* testSubmitButton method
|
||||
*
|
||||
|
|
Loading…
Add table
Reference in a new issue