Linq к объектам, в 580 символах (без пробела)
Console.WriteLine(Enumerable.Range(1, 13).SelectMany(day =>
Enumerable.Repeat("\nOn the " + day +
(day == 1 ? "st" :
(day == 2 ? "nd" :
(day == 3 ? "rd" :
"th"))) + " day of Christmas my true love gave to me ", 1)
.Concat((new []
{
"twelve drummers drumming,",
"eleven pipers piping,",
"ten lords a-leaping,",
"nine ladies dancing,",
"eight maids a-milking,",
"seven swans a-swimming,",
"six geese a-laying,",
"five gold rings,",
"four calling birds,",
"three french hens,",
"two turtle doves, and",
"a partridge in a pear tree."
}).Reverse().Take(day).Reverse()))
.Aggregate((a, b) => a + "\n" + b));
Правильный хеш хранится в сеансе, а элемент формы Hash имеет экземпляр Zend_Session_Namespace, который содержит пространство имен для хэша.
Для модульного тестирования элемента вы должны заменить экземпляр Zend_Session_Namespace в элементе (с setSession) на тот, который вы создали сами, который содержит правильный хэш ( хэш хранится в ключе "hash")
Для дальнейших примеров вы, вероятно, могли бы взглянуть на модульные тесты Zend Framework для класса Zend_Form_Element_Hash. Я предполагаю, что им тоже приходилось иметь дело с этим.
)В качестве дополнительных примеров вы, вероятно, можете посмотреть модульные тесты Zend Framework для класса Zend_Form_Element_Hash. Я предполагаю, что им тоже приходилось иметь дело с этим.
)В качестве дополнительных примеров вы, вероятно, можете посмотреть модульные тесты Zend Framework для класса Zend_Form_Element_Hash. Я предполагаю, что им тоже приходилось иметь дело с этим.
Порядок свойств объекта не гарантированно будет таким же, как вы их вставляете. Однако на практике все основные браузеры возвращают их с целью. Так что, если вы не против полагаться на это ...
var firstProp;
for(var key in jsonObj) {
if(jsonObj.hasOwnProperty(key)) {
firstProp = jsonObj[key];
break;
}
}
Также обратите внимание, что в Chrome есть ошибка , касающаяся порядка, в некоторых крайних случаях он не упорядочивает его так, как они были предоставлены . Что касается того, что он изменится в будущем, шансы на самом деле довольно малы, поскольку я считаю, что это становится частью стандарта, поэтому, если что-либо, поддержка этого станет только официальной.
Однако, если вы действительно, действительно , безусловно, положительно, хочу быть уверенным, что он будет в правильном порядке, в котором вам нужно использовать массив. В противном случае все в порядке.
Связанный вопрос: разработка, постановка или производство
Строка для файла vhost:
SetEnv SITE_ENV "dev"
Затем я просто заставляю свои формы реагировать на соответствующую среду:
if($_SERVER['SITE_ENV']!='dev')
{
$form_element->addValidator($csrf_validator);
}
Я использую ту же технику для многих вещей. Например, если это разработчик, я перенаправляю всю исходящую почту мне и т. Д.
Значение CSRF генерируется каждый раз при рендеринге формы. Скрытый элемент формы предварительно заполняется этим значением. Это значение также сохраняется в сеансе. После отправки формы проверка проверяет, сохраняется ли значение, отправленное из формы, в сеансе, в противном случае проверка не выполняется. Важно, что эта форма должна быть визуализирована во время теста (чтобы она могла генерировать скрытое значение и сохранять его в сеансе), тогда мы можем извлечь скрытое значение из визуализированного html, а позже мы можем добавить скрытое хеш-значение в наш запрос. Рассмотрим этот пример:
function testAddPageStoreValidData()
{
// render the page with form
$this->dispatch('/form-page');
// fetch content of the page
$html = $this->getResponse()->getBody();
// parse page content, find the hash value prefilled to the hidden element
$dom = new Zend_Dom_Query($html);
$csrf = $dom->query('#csrf')->current()->getAttribute('value');
// reset tester for one more request
$this->resetRequest()
->resetResponse();
// now include $csrf value parsed from form, to the next request
$this->request->setMethod('POST')
->setPost(array('title'=>'MyNewTitle',
'body'=>'Body',
'csrf'=>$csrf));
$this->dispatch('/form-page');
// ...
}