MVC и валидация

hell0w0rd

Продвинутый новичок
Выше я написал, что такие поля как капча или повтор пароля, это никак к сущности пользователя не относится, соответственно в сущности пользователя этих данных и не будет...
Почему же? На этапе преобразования в объект модели идет валидация.
Создаете новую сущность в валидаторе - капча. А для повтора(что ЖУТКИЙ БРЕД!!!, как и капча), в symfony заботливо предусмотренн тип http://symfony.com/doc/2.1/reference/forms/types/repeated.html
 

fixxxer

К.О.
Партнер клуба
Василий М.
Что-то ты перемудрил, мне кажется. :)
С необязательными проверками у меня сделано кондово - все валидаторы пропускают null-значение, кроме одного-единственного, который если что ставлю первым.
 

Василий М.

Новичок
fixxxer
ну а как ещё реализовать проверку занятости логина, например? при регистрации нового пользователя?
Лично я не нашел такого решения.
Подобные проверки - это уже не валидация конкретной модели, это синхронизация СУБД - поле login должно быть уникальным.
 

hell0w0rd

Продвинутый новичок
PHP:
<!-- layout.twig -->
<html>
<head>
{% block head %}
    <title>Мой супер сайт - {% block title %}{% endblock %}</title>
    {% block css %}
        <link rel="stylesheet" type="text/css" href="/css/main.css">
    {% endblock %}
{% endblock %}
</head>
<body>
{% block body %}
    
{% endblock %}
{% block javascript %}
    <script type="text/javascript" src="/js/jquery.js"></script>
    <script type="text/javascript" src="/js/main.js"></script>
{% endblock %}
</body>
</html>

<!-- index.twig -->
{% extends 'layout.twig' %}

{% block css %}
    {{ parent() }}
    <link rel="stylesheet" type="text/css" href="index.css">
{% endblock %}

{% block body %}
    <div class="content">
        {% block content %}
            супер-текст
        {% endblock %}
    </div>
    <div class="userplace">
        {% block user %}
        <form>
            <input type="text" name="username">
            <input type="password" name="pass">
        </form>
        {% endblock %}
    </div>
    <div class="menu">
        <ul>
        {% block menu %}
            {% for item in menu %}
                <li><a href="{{ item.href }}" title="{{ item.title }}">{{ item.text }}</a></li>
            {% endfor %}
        {% endblock %}
        </ul>
    </div>
{% endblock %}

<!-- user.index.twig -->
{% extends 'index.twig' %}

{% block user %}
    Привет, {{ user.name }}
{% endblock %}

{% block menu %}
    <li><a href="/user/{{ user.id }}">Перейти к моему профилю</a></li>
    {{ parent() }}
{% endblock %}
Реализуйте на php и чтоб было тоже красиво и понятно. Я понимаю что красота понятие относительное, но всетаки)
 

vanicon

Новичок
ну а как ещё реализовать проверку занятости логина, например? при регистрации нового пользователя?
А почему это правило не поместить в модель пользователя, по моему норм будет..
А вот насчет капчи и повтора паролей вот что я думаю, делать надо не в модели, а где?
Что же можно к контроллер регистрации засунуть, но это противоречит mvc, ок тогда может для этого создать отдельный класс, и там валидировать только поля не относящиеся к модели пользователя, а если все ок то можно заполнять модель пользователя, а у нее свои правила валидации ни как не связанные с капчей и подобными полями...
 

fixxxer

К.О.
Партнер клуба
fixxxer
ну а как ещё реализовать проверку занятости логина, например? при регистрации нового пользователя?
Лично я не нашел такого решения.
Подобные проверки - это уже не валидация конкретной модели, это синхронизация СУБД - поле login должно быть уникальным.
Ну так ты это тоже не обеспечиваешь. разве что если у тебя между validate() и "// ошибко нет - запись данных " сохраняется активная транзакция, чего по коду не видно.
 

Василий М.

Новичок
А почему это правило не поместить в модель пользователя, по моему норм будет..
как вариант.
у меня против этого была нынешняя архитектура
быть может, я попробую перенести эту проверку в модель, да
 

hell0w0rd

Продвинутый новичок
А почему это правило не поместить в модель пользователя, по моему норм будет..
А вот насчет капчи и повтора паролей вот что я думаю, делать надо не в модели, а где?
Что же можно к контроллер регистрации засунуть, но это противоречит mvc, ок тогда может для этого создать отдельный класс, и там валидировать только поля не относящиеся к модели пользователя, а если все ок то можно заполнять модель пользователя, а у нее свои правила валидации ни как не связанные с капчей и подобными полями...
Ну как где? Опять создаем фильтр isMyDataBaseHaveThisData($data) и проверяем)
assertEquals($data1, $data2)
isCapchaRight($capchaCode)
что здесь не так-то?)
 

vanicon

Новичок
Покажи, как это сделать на чистом PHP.
С твигом не работал, поэтому понятие не имею об этой конструкции...
Реализуйте на php и чтоб было тоже красиво и понятно. Я понимаю что красота понятие относительное, но всетаки)
PHP:
<html>
<head>
    <title>Мой супер сайт - <?php echo $title;?></title>
        <link rel="stylesheet" type="text/css" href="/css/main.css">
</head>
<body>
    <script type="text/javascript" src="/js/jquery.js"></script>
    <script type="text/javascript" src="/js/main.js"></script>
</body>
</html>


    <link rel="stylesheet" type="text/css" href="index.css">


    <div class="content">
            супер-текст
    </div>
    <div class="userplace">
        <form>
            <input type="text" name="username">
            <input type="password" name="pass">
        </form>
    </div>
    <div class="menu">
        <ul>
            <?php foreach ($menu as $item):?>
                <li><a href="<?php echo $item['href'];?>" title="<?php echo $item['title'];?>"><?php echo $item['text'];?></a></li>
            <?php endforeach;?>
        </ul>
    </div>



    Привет, <?php echo $user->name;?>


    <li><a href="/user/<?php echo $user->id;?>">Перейти к моему профилю</a></li>
Что понял, то перевел, можно без echo, но мне так привычнее...
 

vanicon

Новичок
Вурдалак
Подобные вещи можно хелпером прикрутить, суть не в этом...
 

hell0w0rd

Продвинутый новичок
vanicon
extends наследует шаблон от другого.
Дальше идет замена блоков, если нужно что-то из блока родителя - вызываем parent()
Помимо этого к тексту можно применить фильтры, есть куча других тегов которые я не учел, на пример экранирование, или удаление пробелов между тегами
<li><a href="<?php echo $item['href'];?>" title="<?php echo $item['title'];?>"><?php echo $item['text'];?></a></li>
Есть рускоязычные сайты по twig, я начинал сам переводить документацию, как раз актуальная документация по синтаксису и блокам была готова. Вообще документация там очень понятная, советую попробовать:)
 

Вурдалак

Продвинутый новичок
Подобные вещи можно хелпером прикрутить, суть не в этом...
Суть в этом. Ты будешь каждый раз вызывать свой хелпер, код будет грязный и появится риск где-то забыть его вызвать. autoescape как раз позволяет не заботиться о таких вещах.

PHP не предназначен для шаблонизации, с этим стоит смириться.
 

vanicon

Новичок
GusakovNick
Не знаю что легче будет выучить дизайнеру, синтаксис php, или целый twig перелопатить, с всякими там наследованиями.
Ведь представление как бы должен дизайнер делать...
Не отрицаю может и есть проекты когда без шаблонизатора и их фичей не обойтись, но мне лично таких проектов не попадалось...
 

vanicon

Новичок
Вурдалак
Если вспомнить создания php вообще, то разве он не создавался как шаблонизатор для perl'a, который можно смешивать с html кодом...
Но опять вас не в ту сторону понесло...
 
Сверху