Является ли CakePhp «совместимым со стандартами» при создании HTML, форм и т. Д.? - PullRequest
2 голосов
/ 06 января 2011

Итак, я много читал «Разработка с использованием веб-стандартов» и действительно наслаждался этим.Я большой пользователь CakePhp, и когда я смотрю на источник различных элементов формы, которые Cake создает с помощью FormHelper, я вижу все виды посторонних

В этой книге он продвигает семантический HTML и пишет вашу разметку как простую./ generic насколько это возможно.

Итак, мой вопрос, лучше ли мне писать свой собственный HTML в этих ситуациях?Я действительно хочу работать в соответствии со стандартами XHTML и CSS, и, похоже, я потратил бы столько же времени (если не больше) на очистку Cakes HTML, когда я мог бы просто написать свои

мысли?

ps Вот пример из готовой формы, которую 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 "дисплей: нет".Я понял, что могу изменить классы и идентификаторы всех полей, но если я делаю это для каждого из них, я могу написать сам HTML ...

Ответы [ 4 ]

3 голосов
/ 06 января 2011

Мои ответы на ваши два вопроса следующие:

Соответствует ли CakePhp стандартам, когда генерация HTML, форм и т. д.?

Да.

В [Проектирование с использованием веб-стандартов] он продвигает семантический HTML и написание Ваша разметка проста / универсальна, как возможный. Итак, мой вопрос, я лучше написать свой собственный HTML в этих ситуации?

Иногда вам лучше, иногда нет. Если ваша цель состоит в том, чтобы использовать минимальную семантическую разметку, вам лучше писать свой собственный HTML большую часть времени. Однако, если ваша цель состоит в том, чтобы быстро создать совместимый со стандартами HTML , то хорошей идеей будет позволить Cake быть тем, чем он должен быть - средой быстрой разработки.

Тем не менее, вы можете сказать Cake не печатать некоторые из его разметки, когда вы сочтете это ненужным. Например, вы можете подавить элементы div, которые переносят входные данные формы, используя значение false с этим параметром: http://book.cakephp.org/view/1397/options-div

1 голос
/ 06 января 2011

Вывод разметки помощниками 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, так как большинство остальных вы пишете сами.

0 голосов
/ 21 февраля 2011

На вопрос уже дан ответ, но, возможно, стоит добавить, что это зависит от того, какие стандарты и какая версия 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.

0 голосов
/ 06 января 2011

Согласно книге CakePHP, сгенерированный HTML соответствует стандартам.

Можно переопределить вывод HTML по умолчанию из методов FormHelper, расширив класс Helper.

Больше информации здесь

...