Несколько форм в одном CTP-файле с тем же контроллером в CakePHP 3 - PullRequest
0 голосов
/ 03 ноября 2018

У меня проблема с двумя разными формами в одном файле ctp.
объяснение : я хочу использовать две формы, связанные с различными действиями в одном контроллере. Я использую первую форму, чтобы добавить 2 текстовых поля в таблицу, и я использую вторую форму только для поиска и извлечения данных.

МОЙ ctp:

Форма 1 с добавлением сообщения и электронной почты

<?= $this->Form->create($message) ?>
<div class="form-group">
    <label for="name" class="col-form-label">Name</label>
    <input name="name" class="form-control" id="name" placeholder="Your Name" type="text">
</div>
<div class="form-group">
    <label for="email" class="col-form-label">Email</label>
    <input name="email" class="form-control" id="email" placeholder="Your Email" type="email">
</div>
<?= $this->Form->button('Submit', ['class'=> "btn btn-primary large icon float-right"]); 
$this->Form->end() ?>   

Форма 2 Поле поиска:

<?= $this->Form->create(null, ['url' => ['action' => 'search']]) ?>
<div class="form-group">
    <label for="what" class="col-form-label">What?</label>
    <input name="what" class="form-control" id="what" placeholder="What are you looking for?" type="text">
</div>
<div class="form-group">
    <?php echo $this->Form->input('country_id', [
        'options' => $countries,
        'id' => 'country_id',
        'label' => ['text' => __('Where?')]
    ]); ?>
</div>
<button type="submit" class="btn btn-primary width-100">Search</button>
<?= $this->Form->end() ?>

Итак, я нажал на кнопку отправки, она работает нормально, но когда я нажал на поиск, он не перешел к желаемому действию, он все еще в том же действии. Спасибо!

Ответы [ 2 ]

0 голосов
/ 04 ноября 2018

Проблема была решена путем замены этого кода:

<?= $this->Form->button('Submit', ['class'=> "btn btn-primary large icon float-right"]); 
$this->Form->end() ?>

По этому:

<?php
echo $this->Form->button('Submit', ['class'=> "btn btn-primary large icon float-right"]); 
echo $this->Form->end();
?>
0 голосов
/ 04 ноября 2018

Этот код не делает то, что вы думаете, он делает:

<?= $this->Form->button('Submit', ['class'=> "btn btn-primary large icon float-right"]); 
$this->Form->end() ?>

Это будет повторять кнопку отправки, но НЕ тег конца формы. Затем вы открываете другую форму, но браузер может интерпретировать это как плохой тег и игнорировать его. (Технически я думаю, что поведение браузера по отношению к этому искаженному HTML не определено, поэтому вы можете по-разному вести себя в разных браузерах.)

Попробуйте вместо этого:

<?php
echo $this->Form->button('Submit', ['class'=> "btn btn-primary large icon float-right"]); 
echo $this->Form->end();
?>

или

<?= $this->Form->button('Submit', ['class'=> "btn btn-primary large icon float-right"]); 
echo $this->Form->end() ?>

или

<?= $this->Form->button('Submit', ['class'=> "btn btn-primary large icon float-right"]) .
$this->Form->end() ?>

Я бы порекомендовал первый вариант, так как он намного более четкий и менее подвержен случайным сбоям при будущих изменениях; Я никогда не позволю ни одному из последних двух участвовать в проекте, которым управлял.

...