Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение maleks »

girmate писал(а): Разъясните пожалуйста про этот ::link() пожалуйста. Вы написали код под yii1, не могу найти аналог в yii2. Что должен делать этот хелпер. Он обычную ссылку генерит?
Вот пример "post" ссылки:
https://github.com/yiisoft/yii2/blob/ma ... ii.js#L138
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

maleks писал(а):
girmate писал(а): Разъясните пожалуйста про этот ::link() пожалуйста. Вы написали код под yii1, не могу найти аналог в yii2. Что должен делать этот хелпер. Он обычную ссылку генерит?
Вот пример "post" ссылки:
https://github.com/yiisoft/yii2/blob/ma ... ii.js#L138
О, спасибо огромное. Нужная вещь. Если можно проясните, что там нужно знать про _csrf? Знаю, что там есть какой-то нюанс.
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение maleks »

girmate писал(а):Знаю, что там есть какой-то нюанс.
А я вот не в курсе что там есть какой то ньюанс.
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение caHek2x »

girmate писал(а):
caHek2x писал(а):
И как это Вы без activForm? Без моделей что ли)
модель не обязывает использование актив форм echo никто не отменял ... ошибки hasError getFirstError ...
Я хочу это увидеть. Покажите код генерации какой-нибудь своей формы, пожалуйста, и методы где используются hasErrors, getFirstError. Хочу понять как Вы это организовываете. Если не сильно затруднит.
эм не знаю что вы тут хотели бы увидеть волшебного .. .но все просто ...

Код: Выделить всё

<form method="post" action="<?= Url::toRoute("/admin/categories/add") ?>">
   <input type="hidden" name="_csrf" value="<?= Yii::$app->request->getCsrfToken() ?>"/>
   <? //################?>
   <div class="group4">
      <div class="card4_content">
         <label class="label3" for="Categories[name]">Название категории:</label>
         <input class="input3" id="Categories[name]" name="Categories[name]" type="text" value="<?= $category->name ?>">
         <?= ($category->hasErrors("name")) ? "<span class='error3'>" . $category->getFirstError("name") . "</span>" : ""; ?>
      </div>
   </div>
   <? //################?>
.....
у меня много форм ужасно длинных динамических и тд ... и вот в формах где добавляются динамически поля ... вкладываются друг в друга и тд ... я не сдружился с AF ... поэтому сам верстаю .. .мне так проще .. хоть и на вид больше текста ... вот пример формы в которой "конфиги"(в память -> цвет, дальше можно в цвет еще чтото вложить и так до бесконечности) могут вкладываться до бесконечности в пункты ... https://yadi.sk/d/Kx_royf-xfH5M
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

Возьму на заметку, но нужно время переварить. Спасибо.
Осторожно! Вы общаетесь с новичком ;)
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение Nerf »

Самый удобный вариант с простой ссылкой, не вижу смысла усложнять код контроллера проверками на тип кнопки и соответствующими действиями. Проще и удобней добавить отдельный экшен. Типа Html::a('кнопка', ['route'], ['data-method' => 'post'])

А зачем вам устанавливать поле в значение по умолчанию? Просто обнуляете значение. А для получения значения пишете в компоненте что-то такое:

Код: Выделить всё

public funtion get($code, $default = null) {
    $model = $this->getModelByCode($code);
    if ($model->value) {
        return $model->value;
    } else {
        return $dafaut ?: $model->default;
    }
}
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

Nerf писал(а):Самый удобный вариант с простой ссылкой, не вижу смысла усложнять код контроллера проверками на тип кнопки и соответствующими действиями. Проще и удобней добавить отдельный экшен. Типа Html::a('кнопка', ['route'], ['data-method' => 'post'])

А зачем вам устанавливать поле в значение по умолчанию? Просто обнуляете значение. А для получения значения пишете в компоненте что-то такое:

Код: Выделить всё

public funtion get($code, $default = null) {
    $model = $this->getModelByCode($code);
    if ($model->value) {
        return $model->value;
    } else {
        return $dafaut ?: $model->default;
    }
} 
Ну очень хорошо. Я не пойму как обычная ссылка начинает методом пост работать? Я видел такую реализацию, мне просто непонятно это про ссылки.
Я соглашусь, что можно обнулять. Действительно, зачем хранить две копии одной информации. Тем более, что она можеть быть объемная. Опять нехватка опыта сказывается. Спасибо.
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение maleks »

girmate писал(а): Ну очень хорошо. Я не пойму как обычная ссылка начинает методом пост работать?
yii-шным яваскриптом делается сабмит формы (если формы нет то она создастся), в комменте к ссылке что я дал выше об этом сказано.
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение Йож »

girmate писал(а):Я не пойму как обычная ссылка начинает методом пост работать?
Происходит простой переход по ссылке, кнопку делайте, как ссылку:

Код: Выделить всё

<?php echo Html::a('Обнулить все счетчики', ['price/set-done-null'], ['class' => 'btn btn-success']); ?>
caHek2x
Сообщения: 1242
Зарегистрирован: 2016.04.12, 20:41

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение caHek2x »

а потом он эту ссылку нечаянно из истории браузера откроет ...
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение Йож »

caHek2x писал(а):а потом он эту ссылку нечаянно из истории браузера откроет ...
Да, косяк.. Тогда лучше формой..
Впрочем, можно referer проверять - если прямой вход (ввод, закладки, история) - то он пустой будет.
Если нажали на странице нужной - то он будет и простая проверка решит вопрос.

Просто не вижу смысла нагораживать формы и т.д...
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

maleks писал(а):
girmate писал(а): Ну очень хорошо. Я не пойму как обычная ссылка начинает методом пост работать?
yii-шным яваскриптом делается сабмит формы (если формы нет то она создастся), в комменте к ссылке что я дал выше об этом сказано.
Ну я так и предполагал, что вмешивается в работу yii JS. Иначе никак - обычная ссылка. Спасибо за помощь.
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

caHek2x писал(а):а потом он эту ссылку нечаянно из истории браузера откроет ...
Все верно, как и говорят - все что вносит изменения в БД делать только через POST запросы. Поэтому я и стал копать в этом направлении.
Осторожно! Вы общаетесь с новичком ;)
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение maleks »

girmate писал(а): Все верно, как и говорят - все что вносит изменения в БД делать только через POST запросы.
Не только в БД, но и просто что меняет состояние системы.
В теории оно конечно надо всегда, но на практике например та же ссылка logout и с отключенным яваскриптом должна работать.
Nerf
Сообщения: 780
Зарегистрирован: 2015.01.29, 00:37

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение Nerf »

maleks писал(а):
girmate писал(а): Все верно, как и говорят - все что вносит изменения в БД делать только через POST запросы.
Не только в БД, но и просто что меняет состояние системы.
В теории оно конечно надо всегда, но на практике например та же ссылка logout и с отключенным яваскриптом должна работать.
Если должна, то делайте формы самостоятельно. Написать виджет типа PostFormLinkAkaButton2000::widget(route) дело несложное. Без js, смс и регистрации :lol:
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение Йож »

Попробовал все это дело, удобно получается :) Хоть тема и не моя, но спасибо за наводку)

Код: Выделить всё

<?php echo Html::a('Обнулить все счетчики', ['price/set-done-null'], [
         'data' => [
             'method' => 'post',
             'confirm' => 'Are you sure?',
         ],
        'class' => 'btn btn-success'
     ]); ?>
Можно еще короче:

Код: Выделить всё

<?php echo Html::a('Обнулить все счетчики', ['price/set-done-null'], ['data-method' => 'post', 'class' => 'btn btn-success']); ?>
В контроллере:

Код: Выделить всё

 public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'set-done-null' => ['post'],
                ],
            ],
        ];
    } 
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение maleks »

Nerf писал(а): Если должна, то делайте формы самостоятельно.
Формой можно подделать, но это не универсальное решение. Когда отдельно там где то ...
Но например та же ссылка в меню, одна из многих, когда виджет меню отображает ссылки, он не должен знать что одна из ссылок, это не ссылка, а форма.
Если эти вещи вам в новинку, то можете глянуть как например на этом форуме сделано. ;)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

Йож писал(а):Попробовал все это дело, удобно получается :) Хоть тема и не моя, но спасибо за наводку)
Вы не поверите, но вот только сегодня запилил практически точь в точь как Вы написали, хоть и не видел Вашего кода. Единственное - Ваш метод не требует передачи дополнительных параметров, так как выполняет всегда одно действие над всеми сразу сущностями, а я еще передаю дополнительно 'params' => ['id' => $model->id] (пишу по памяти).
А вот сейчас зашел и увидел Ваш код, даже улыбнулся, что так же все сделал. И методом POST получается в итоге, и не нужно дополнительную форму создавать.

Ну и в контроллере я сделал соответствующий экшен, где проверяю Yii::$app->request->post('id') и выполняю операцию. Кстати, _crsf учитывается. Пробовал поменять _crsf - пишет что запрос неверный (или что-то в этом роде). Так что все отлично, мне кажется.
Осторожно! Вы общаетесь с новичком ;)
Rom
Сообщения: 81
Зарегистрирован: 2014.12.22, 11:56

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение Rom »

girmate писал(а):где проверяю Yii::$app->request->post('id') и выполняю операцию.
Можно проще

Код: Выделить всё

public function action($id)
Аватара пользователя
girmate
Сообщения: 1534
Зарегистрирован: 2015.10.27, 12:52

Re: Форма в форме. Как организовать дополнительный функционал в форме? [есть картинки :) ]

Сообщение girmate »

Не приходит туда ($id), я сразу так и написал.
Осторожно! Вы общаетесь с новичком ;)
Ответить