Соответствует ли CakePhp "стандартам" при создании HTML, форм и т. д.?
Так что я читал много "проектирование с использованием веб-стандартов" и действительно наслаждался этим. Я большой пользователь CakePhp, и когда я смотрю на источник для различных элементов формы, которые Cake создает с помощью своего FormHelper, я вижу все виды посторонних
В книге он продвигает семантический HTML и пишет свою разметку как можно проще / универсальнее.
Итак, мой вопрос заключается в том, лучше ли я пишу свой собственный HTML в этих ситуациях? Я очень хочу работать в соответствии с XHTML и CSS стандарты, и, кажется, я бы потратил столько же времени (если не больше) на очистку тортов HTML, когда я мог бы просто написать свой собственный
Мысли?
P. s. Вот пример в форме out of the box, которую CakePHP генерирует с помощью FormHelper
<form id="CompanyAddForm" method="post" action="/omni_cake/companies/add" accept-charset="utf-8"><div style="display:none;"><input type="hidden" name="_method" value="POST" /></div> <div class="input text required"><label for="CompanyName">Name</label><input name="data[Company][name]" type="text" maxlength="50" id="CompanyName" /></div> <div class="input text required"><label for="CompanyWebsite">Website</label><input name="data[Company][website]" type="text" maxlength="50" id="CompanyWebsite" /></div> <div class="input textarea"><label for="CompanyNotes">Notes</label><textarea name="data[Company][notes]" cols="30" rows="6" id="CompanyNotes" ></textarea></div> <div class="submit"><input type="submit" value="Submit" /></div></form>
Править: An в форме отступа (отступ не влияет на проблему соответствия стандартам, но приведенный выше стиль одной строки почти невозможно прочитать):
<form id="CompanyAddForm" method="post" action="/omni_cake/companies/add" accept-charset="utf-8">
<div style="display:none;">
<input type="hidden" name="_method" value="POST" />
</div>
<div class="input text required">
<label for="CompanyName">Name</label>
<input name="data[Company][name]" type="text" maxlength="50" id="CompanyName" />
</div>
<div class="input text required">
<label for="CompanyWebsite">Website</label>
<input name="data[Company][website]" type="text" maxlength="50" id="CompanyWebsite" />
</div>
<div class="input textarea">
<label for="CompanyNotes">Notes</label>
<textarea name="data[Company][notes]" cols="30" rows="6" id="CompanyNotes" ></textarea>
</div>
<div class="submit">
<input type="submit" value="Submit" />
</div>
</form>
В вышеприведенном, есть те пара дивов это кажется ненужным, как тот, который имеет встроенный CSS "display:none". Я понял, что могу изменить классы и идентификаторы всех полей, но если я делаю это для каждого из них, я мог бы также написать HTML сам...
4 ответа:
Мои ответы на ваши два вопроса следующие:
Соответствует ли CakePhp стандартам, когда создание HTML, форм и т.д.?
Да.
Иногда вам лучше, иногда нет. Если ваша цель-использовать минимальную, семантическую разметка, вы могли бы быть лучше писать свой собственный HTML большую часть времени. Тем не менее, если ваша цель состоит в том, чтобы быстро генерировать совместимый со стандартами HTML , то позволить Cake быть тем, чем он должен быть-быстрым фреймворком разработки-это хорошая идея. Тем не менее, вы можете сказать Cake, чтобы он не печатал часть своей разметки, когда сочтете ее ненужной. Например, вы можете подавить элементыВ [проектировании с использованием веб-стандартов], он продвигает семантический HTML и написание ваша разметка так же проста / универсальна, как возможный. Так что мой вопрос в том, я ли это лучше написать мой собственный HTML в этих ситуации?
div
, которые переносят входные данные формы, используя значениеfalse
с этой опцией: http://book.cakephp.org/view/1397/options-div
Разметка, выводимая помощниками Cake, безусловно, соответствует стандартам , так как вы можетепроверить в любое время. То, что это может быть, возможно, является проще, но не намного больше. Контейнер
Если вам не нравится структура<div style="display:none;">
со скрытыми полями ввода может быть излишним, но он прекрасно группирует эти поля и убирает их с пути. Если вы используете компонент SecurityComponent, вы найдете гораздо больше этих необходимых скрытых полей, что делает обертывание<div>
менее лишним. Не считая поэтому мне трудно найти какую-либо действительно постороннюю разметку.<div><label><input>[error]</div>
, Вы можете использовать специализированную структуру$this->Form->label()
и т. д. методы, позволяющие создавать только входные элементы и упаковывать их в собственные элементы контейнера. Просто не забудьте включить$this->Form->error()
также где-нибудь.Я думаю, что лучший способ-начать прототипирование ваших приложений с использованием базовых
$this->Form->input()
групп элементов. Часто они отлично подходят и для конечного приложения. Если во время разработки вы осознав, что вам нужна другая разметка, чем та, которую предлагает вам Cake, вы можете начать переход к более пользовательской разметке. Единственное, что вы должны не делать, это писать свои собственные элементы<input>
, вы всегда должны использовать методы FormHelper, чтобы произвести их, так как это заботится о многих деталях, которые являются болью, чтобы правильно воспроизвести вручную.Кроме FormHelper, я не думаю, что есть на что жаловаться в HTML-разметке Cake, так как вы пишете большую часть отдохни сам.
Согласно Книге CakePHP, сгенерированный HTML соответствует стандартам.
Можно переопределить вывод HTML по умолчанию из методов FormHelper, расширив вспомогательный класс.
Подробнее здесь
Вопрос уже ответил, но, возможно, стоит добавить, что это зависит от того, какие стандарты и какая версия CakePHP.
Типы ввода форм HTML5 не поддерживаются программой FormHelper в версии 1.2.x и 1.3.x, например
echo $this->Form->input('User.email', array('type' => 'email'));
Выведет что-то вроде
<div class="input textarea"> <label for="UserEmail">Email</label> <textarea id="UserEmail" name="data[User][email]"></textarea> </div>
По-видимому, это будет исправлено в 2.0.x .
Другой крайний случай - если у вас есть несколько форм на странице с одной и той же моделью, вы можете получить дубликаты HTML-идентификаторов.