Задания:

* В методо setAttribute требование "Должно быть экранирование значения атрибута." заменить на "Должно быть экранирование названия и значения атрибутов.".
* Описание кнопок для метода addButton.
    * submit
    * cancel
* Обновление общего теста.
    
# setAttribute: Должно быть экранирование названия и значения атрибутов.

Код:
$form = new Form();
$form->addAttribute('\', ", >, <, &.', '\', ", >, <, &.');
echo (string)$form;

Результатом будет: 
<form ', &quot;, &gt;, &lt;, &amp;="', &quot;, &gt;, &lt;, &amp;">
</form>

Код и результат выглядит странно, но это только тест, который указывает, что экранирование работает.

# submit кнопка

Может быть без дополнительных параметров, с одним или с двумя.

* Если указан один параметр, значение будет равно submit, текст будет Submit.
Код:
$form->addButton("submit");

Результат:
<button type="submit" name="action" value="submit">Submit</button>

* Может быть два параметра, тогда значение будет равно submit, текст кнопки - второй параметр.
Код:
$form->addButton("submit", "Button Title");

Результат:
<button type="submit" name="action" value="submit">Button Title</button>


* Может быть три параметра.
Код:
$form->addButton("submit", "button_value", "Button Title");

Результат:
<button type="submit" name="action" value="button_value">Button Title</button>

# cancel кнопка

cancel кнопка предназначена для закрытия формы и возврата на предыдущую страницу. 

На странице представлена ссылкой (<a>).

Один дополнительный обязательный параметр - ссылка для возврата.

* указан один дополнительный параметр.
Тогда текст кнопки будет Cancel,  ссылка - дополнительный параметр.

Код:
$form->addButton("cancel", "/some/path");

Результат:
<a href="/some/path" data-plugin-cancel-button class="btn">Cancel</a>

* указано два дополнительных параметра.
Тогда ссылка - первый дополнительный параметр,
текст кнопки - второй дополнительный параметр.

Код:
$form->addButton("cancel", "/some/path", "Close");

Результат:
<a href="/some/path" data-plugin-cancel-button class="btn">Close</a>

# Обновление общего теста.

Код:
$form = new Form('this_is_form_name');

// attributes
// first attribute
$form->addAttribute('id', 'simple_form');
// second attribute
$form->addAttribute('action', 'some/path');
// replace second attribute
$form->addAttribute('action', 'new/path');
// escaping
$form->addAttribute('\'"<>&escape', '\', ", <, >, &.');

// fields
// hidden field (and first field)
$form->addField('hidden', 'id', 700);
// title field (and second field)
$form->addField('title', 'doc_title', 'This is title!');
// text field
$form->addField('text', 'content', 'This is content!');
// replace seconds field
$form->addField('title', 'doc_title', 'This is doc!');
// escaping
$form->addField('title', '\'"<>&escape', '\', ", <, >, &.');

// buttons
// first button
$form->addButton('submit', 'Save');
// second button
$form->addButton('cancel', '/some/path', 'Cancel');
echo (string)$form;

Результатом будет: 
<form id="simple_form" action="new/path" '&quot;&gt;&lt;&amp;escape="&quot;', &quot;, &gt;, &lt;, &amp;.">
<input type="hidden" name="_form_name_" value="this_is_form_name" />
<input type="hidden" name="id" value="700" />
<input type="text" name="doc_title" value="This is doc!" />
<textarea name="content">This is content!</textarea>
<input type="text" name="'&quot;&gt;&lt;&amp;escape" value="&quot;', &quot;, &gt;, &lt;, &amp;." />
<button type="submit" name="action" value="submit">Save</button>
<button type="button" name="action">Cancel</button>
<a href="/some/path" data-plugin-cancel-button class="btn">Cancel</a>
</form>
