Я новичок, когда дело доходит до рамки Phalcon и его двигателя Volt, но я бы очень хотел его изучить. Я слежу за их документацией, и сейчас я нахожусь в их проекте INVO.Получить выбранный элемент из формы
И у них есть база данных продуктов, и эти продукты имеют тип (5-Овощи, 6-Фрукты). Поэтому, когда я перечисляю все продукты, он отображает все данные об этом продукте и дает ссылку на «редактирование» этих данных для этого конкретного продукта. Поэтому, когда я нажимаю «редактировать», я хочу открыть, как html-форму, которая будет содержать уже заполненные поля данными из этого конкретного продукта.
Это класс формы, которую они используют, чтобы создать форму для продуктов:
<?php
use Phalcon\Forms\Form;
use Phalcon\Forms\Element\Text;
use Phalcon\Forms\Element\Hidden;
use Phalcon\Forms\Element\Select;
use Phalcon\Validation\Validator\Email;
use Phalcon\Validation\Validator\PresenceOf;
use Phalcon\Validation\Validator\Numericality;
class ProductsForm extends Form
{
/**
* Initialize the products form
*
* @param null $entity
* @param array $options
*/
public function initialize($entity = null, $options = array())
{
if (isset($options['edit'])) {
$element = new Text("id");
$this->add($element->setLabel("Id"));
} else {
$this->add(new Hidden("id"));
}
$name = new Text("name");
$name->setLabel("Name");
$name->setFilters(array('striptags', 'string'));
$name->addValidators(
array(
new PresenceOf(
array(
'message' => 'Name is required'
)
)
)
);
$this->add($name);
$type = new Select(
'profilesId',
ProductTypes::find(),
array(
'using' => array('id', 'name'),
'useEmpty' => true,
'emptyText' => '...',
'emptyValue' => ''
)
);
$this->add($type);
$price = new Text("price");
$price->setLabel("Price");
$price->setFilters(array('float'));
$price->addValidators(
array(
new PresenceOf(
array(
'message' => 'Price is required'
)
),
new Numericality(
array(
'message' => 'Price is required'
)
)
)
);
$this->add($price);
}
}
Этого действие от контроллера:
/**
* Shows the view to "edit" an existing product
*/
public function editAction($id)
{
if (!$this->request->isPost()) {
$product = Products::findFirstById($id);
if (!$product) {
$this->flash->error("Product was not found");
return $this->forward("products/index");
}
$this->view->form = new ProductsForm($product, array('edit' => true));
}
}
И это мой файл вида edit.volt :
{{ form("products/whatever") }}
<h2>Search products</h2>
<fieldset>
{% for element in form %}
<div class="control-group">
{{ element.label(['class': 'control-label']) }}
<div class="controls">{{ element }}</div>
</div>
{% endfor %}
<div class="control-group">
{{ submit_button("Edit", "class": "btn btn-primary") }}
</div>
</fieldset>
Теперь, когда я нажимаю на конкретный продукт я получаю это: Edit screen
Как вы можете видеть ... все, кроме тега select, уже заполнено, и это отлично работает ... его просто выбирают, который не выбирается. :( Я имею в виду, что я могу щелкнуть выпадающее меню, и он показывает мне данные ... но я хочу, чтобы он был уже выбран, как и все остальное.
Итак, мой вопрос: могу ли я добавить (и как сделайте это, если это возможно), как оператор if внутри моего edit.volt, который будет выглядеть как «если следующий элемент - это элемент выбора, просто выберите значение, которое уже находится в базе данных», как на этом экране, если его перец колокола затем 5-Овощи должны быть уже выбраны ... то, если вы хотите, вы можете изменить его и сохранить его ... но я просто хочу, чтобы быть уже выбран.
Прошу прощения за длинный пост.
Ваш код выглядит хорошо. Имя вашего выбранного ввода ('profilesId') - это также имя столбца профиля в вашей модели' product'? – Timothy
@ Тимоти Нет, это не так. В моей модели продуктов он называется $ product_types_id, и это внешний ключ для другой модели ProductTypes ($ id) (эта модель содержит только идентификатор и имя для типов: например, id: 5 name: Vegetables).Я использовал Phalcon Dev Tools для создания моих моделей и создал его с этими именами, потому что это то, как эти столбцы называются в базе данных (кстати, это из учебника документации Phalcon ... я использую их материалы, потому что им просто пытаются узнайте об этом, но, по-видимому, я слишком глуп даже для этого :() – Blitva
@Timothy, единственное, что я сделал для edit.volt, потому что они не предоставили код для этого файла, поэтому я просто скопировал это из другой файл. Я решил, что смогу использовать его, так как мне просто нужна форма, и он будет заполнен данными, которые он дал – Blitva