I am beginner when it comes to Phalcon framework and his Volt engine but i would really like to learn it. I am following their documentation and i am currently on their INVO project.
And they have a database of products, and those products have like a type (5-Vegetables, 6-Fruit). So when i list all the products, it displays all the data about that product and it gives you the link to "edit" that data for that specific product. So when i click on "edit" i want to open like a html form that will contain already filled fields with data from that specific product.
This is the form class that they use to create a form for products:
<?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);
}
}
This is the action from the controller:
/**
* 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));
}
}
And this is my edit.volt view file:
{{ 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>
Now when i click on a specific product i get this: Edit screen
As you can see... everything except the select tag has been already filled and that works fine... its just that one select that doesn't get selected. :( I mean i can click the dropdown menu and it does show me the data... but i want it to be already selected like everything else is.
So my question is, can i add (and how to do it if its possible) like an if statement inside my edit.volt that will go like "if the next element is a select element, just select the value that is already in the database", like in that screen, if its bell pepper then 5-Vegetables should already be selected... then if you want you can change it and save it... but i just want it to already be selected.
I apologize for the long post.