Hi guys,
I have a form for a blog article, it contains related categories, I have a categories multi select, and I got the save working, but I can't figure out how to define the selected items, I'm binding the entity to the form.
See my code below:
Action:
public function editAction()
{
    $id = (int) $this->dispatcher->getParam(0);
    if (is_numeric($id) && $id != 0) {
        $article = Blog::findFirstById($id);
        $form = new BlogArticleForm($article, [
            'edit' => true,
        ]);
        $this->view->setVar('form', $form);
    } else {
        throw new Exception('Invalid ID');
    }
}Models:
<?php
namespace Common\NewInToday\Models;
use Phalcon\Mvc\Model;
/**
 * Class Blog
 * @package Common\NewInToday\Models
 * @author Andre Figueira <[email protected]>
 */
class Blog extends Model
{
    /**
     * @var int
     */
    protected $id;
    /**
     * @var int
     */
    protected $authorId;
    /**
     * @var string
     */
    protected $status;
    /**
     * @var string
     */
    protected $title;
    /**
     * @var string
     */
    protected $permalink;
    /**
     * @var string
     */
    protected $excerpt;
    /**
     * @var string
     */
    protected $content;
    /**
     * @var string
     */
    protected $metaTitle;
    /**
     * @var string
     */
    protected $metaKeywords;
    /**
     * @var string
     */
    protected $metaDescription;
    /**
     * @var string
     */
    protected $keywords;
    /**
     * @var string
     */
    protected $date;
    const STATUS_PUBLISHED = 'published';
    const STATUS_DRAFT = 'draft';
    /**
     * Map the table columns to camelCase.
     *
     * @return array
     */
    public function columnMap()
    {
        return [
            'id' => 'id',
            'author_id' => 'authorId',
            'status' => 'status',
            'title' => 'title',
            'permalink' => 'permalink',
            'excerpt' => 'excerpt',
            'content' => 'content',
            'meta_title' => 'metaTitle',
            'meta_keywords' => 'metaKeywords',
            'meta_description' => 'metaDescription',
            'keywords' => 'keywords',
            'date' => 'date',
        ];
    }
    public function initialize()
    {
        $this->hasOne(
            'authorId',
            'Common\NewInToday\Models\Users',
            'id',
            [
                'alias' => 'author'
            ]
        );
        $this->hasManyToMany(
            'id',
            'Common\NewInToday\Models\BlogCategoriesCategories',
            'blogId',
            'blogCategoriesId',
            'Common\NewInToday\Models\BlogCategories',
            'id',
            [
                'alias' => 'categories[]',
            ]
        );
    }
    /**
     * @return int
     */
    public function getId()
    {
        return $this->id;
    }
    /**
     * @param int $id
     * @return $this
     */
    public function setId($id)
    {
        $this->id = $id;
        return $this;
    }
    /**
     * @return int
     */
    public function getAuthorId()
    {
        return $this->authorId;
    }
    /**
     * @param int $authorId
     * @return $this
     */
    public function setAuthorId($authorId)
    {
        $this->authorId = $authorId;
        return $this;
    }
    /**
     * @return string
     */
    public function getStatus()
    {
        return $this->status;
    }
    /**
     * @param string $status
     * @return $this
     */
    public function setStatus($status)
    {
        $this->status = $status;
        return $this;
    }
    /**
     * @return string
     */
    public function getTitle()
    {
        return $this->title;
    }
    /**
     * @param string $title
     * @return $this
     */
    public function setTitle($title)
    {
        $this->title = $title;
        return $this;
    }
    /**
     * @return string
     */
    public function getPermalink()
    {
        return $this->permalink;
    }
    /**
     * @param string $permalink
     * @return $this
     */
    public function setPermalink($permalink)
    {
        $this->permalink = $permalink;
        return $this;
    }
    /**
     * @return string
     */
    public function getExcerpt()
    {
        return $this->excerpt;
    }
    /**
     * @param string $excerpt
     * @return $this
     */
    public function setExcerpt($excerpt)
    {
        $this->excerpt = $excerpt;
        return $this;
    }
    /**
     * @return string
     */
    public function getContent()
    {
        return $this->content;
    }
    /**
     * @param string $content
     * @return $this
     */
    public function setContent($content)
    {
        $this->content = $content;
        return $this;
    }
    /**
     * @return string
     */
    public function getMetaTitle()
    {
        return $this->metaTitle;
    }
    /**
     * @param string $metaTitle
     * @return $this
     */
    public function setMetaTitle($metaTitle)
    {
        $this->metaTitle = $metaTitle;
        return $this;
    }
    /**
     * @return string
     */
    public function getMetaKeywords()
    {
        return $this->metaKeywords;
    }
    /**
     * @param string $metaKeywords
     * @return $this
     */
    public function setMetaKeywords($metaKeywords)
    {
        $this->metaKeywords = $metaKeywords;
        return $this;
    }
    /**
     * @return string
     */
    public function getMetaDescription()
    {
        return $this->metaDescription;
    }
    /**
     * @param string $metaDescription
     * @return $this
     */
    public function setMetaDescription($metaDescription)
    {
        $this->metaDescription = $metaDescription;
        return $this;
    }
    /**
     * @return string
     */
    public function getKeywords()
    {
        return $this->keywords;
    }
    /**
     * @param string $keywords
     * @return $this
     */
    public function setKeywords($keywords)
    {
        $this->keywords = $keywords;
        return $this;
    }
    /**
     * @return string
     */
    public function getDate()
    {
        return $this->date;
    }
    /**
     * @param string $date
     * @return $this
     */
    public function setDate($date)
    {
        $this->date = $date;
        return $this;
    }
    public function beforeSave()
    {
        if ($this->getDate() === null) {
            $this->setDate(date('Y-m-d H:i:s'));
        }
    }
}View
<form role="form" action="dashboard/blog/save" method="post" id="edit-article-form">
<div class="row">
    <div class="col-md-9">
        <div class="box box-primary">
            <div class="box-header with-border">
                <h3 class="box-title">Edit Article <strong>{{ form.get('title').getValue() }}</strong></h3>
            </div><!-- /.box-header -->
            <!-- form start -->
            <div class="box-body">
                {{ form.render('id') }}
                {{ form.render('author-id') }}
                {{ form.renderDecorated('title') }}
                {{ form.renderDecorated('permalink') }}
                {{ form.renderDecorated('excerpt') }}
                {{ form.renderDecorated('content') }}
            </div><!-- End box body -->
        </div><!-- End box -->
        <div class="box box-primary collapsed-box">
            <div class="box-header with-border">
                <h3 class="box-title">Meta tags</h3>
                <div class="box-tools pull-right">
                    <button class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-plus"></i></button>
                </div>
            </div><!-- /.box-header -->
            <!-- form start -->
            <div class="box-body" style="display: none">
                {{ form.renderDecorated('meta-title') }}
                {{ form.renderDecorated('meta-keywords') }}
                {{ form.renderDecorated('meta-description') }}
            </div><!-- /.box-body -->
        </div><!-- End box -->
    </div><!-- End col -->
    <div class="col-md-3">
        <div class="box box-primary">
            <div class="box-header with-border">
                <h3 class="box-title">Meta</h3>
            </div><!-- /.box-header -->
            <!-- form start -->
            <div class="box-body">
                {{ form.renderDecorated('status') }}
                {{ form.renderDecorated('categories[]') }}
                {{ form.renderDecorated('keywords') }}
            </div><!-- /.box-body -->
            <div class="box-footer">
                <button type="submit" class="btn btn-success">Save changes</button>
            </div>
        </div><!-- End box -->
    </div><!-- End col -->
</div><!-- End row --></form>
Form
<?phpnamespace Guru\Dashboard\Forms;
use Common\NewInToday\Models\BlogCategories; use Phalcon\Forms\Element\Hidden; use Phalcon\Forms\Element\Select; use Phalcon\Forms\Element\Text; use Phalcon\Forms\Element\TextArea; use Phalcon\Validation\Validator\PresenceOf;
/**
- Class BlogArticleForm
- @package Guru\Dashboard\Forms
- 
@author Andre Figueira [email protected] */ class BlogArticleForm extends BootstrapForm { public function initialize($entity = null, $options = null) { if (isset($options['edit']) && $options['edit']) { $id = new Hidden('id'); } else { $id = new Text('id'); } $authorId = new Hidden('author-id', [ 'value' => $this->session->get('auth')->id, ]); $title = new Text('title', [ 'id' => 'title', 'placeholder' => 'Enter article title', 'class' => 'form-control slugify', 'autocomplete' => 'off', 'data-slugger' => '.permalink-slug', ]); $title->setLabel('Title'); $title->addValidators([ new PresenceOf([ 'message' => 'Please enter a title for your article', ]) ]); $permalink = new Text('permalink', [ 'id' => 'permalink', 'placeholder' => 'Enter an article permalink', 'class' => 'form-control permalink-slug', 'autocomplete' => 'off', ]); $permalink->setLabel('Permalink'); $title->addValidators([ new PresenceOf([ 'message' => 'Please enter a permalink for your article', ]) ]); $excerpt = new TextArea('excerpt', [ 'id' => 'excerpt', 'placeholder' => 'Enter a short article description', 'class' => 'form-control', ]); $excerpt->setLabel('Excerpt'); $content = new TextArea('content', [ 'id' => 'content', 'class' => 'summernote', ]); $content->setLabel('Content'); $metaTitle = new Text('meta-title', [ 'id' => 'meta-title', 'placeholder' => 'Enter a page title', 'class' => 'form-control', 'autocomplete' => 'off', ]); $metaTitle->setLabel('Meta title'); $metaKeywords = new Text('meta-keywords', [ 'id' => 'meta-keywords', 'placeholder' => 'Enter a page keywords', 'class' => 'form-control', 'autocomplete' => 'off', ]); $metaKeywords->setLabel('Meta keywords'); $metaDescription = new Text('meta-description', [ 'id' => 'meta-description', 'placeholder' => 'Enter a page description', 'class' => 'form-control', 'autocomplete' => 'off', ]); $metaDescription->setLabel('Meta description'); $categories = new Select( 'categories[]', BlogCategories::find('parentId = 0'), [ 'class' => 'multi-selectize', 'using' => [ 'id', 'name', ], 'useEmpty' => true, 'emptyText' => 'Select categories...', 'multiple' => 'multiple', ] ); $categories->setLabel('Categories'); $status = new Select('status', [ 'published' => 'Published', 'draft' => 'Draft', ]); $status ->setLabel('Status') ->setAttributes([ 'id ' => 'status', 'class' => 'selectize', ]) ; $keywords = new Text('keywords', [ 'id' => 'input-tags', 'placeholder' => 'Enter some keywords', ]); $keywords->setLabel('Keywords'); $this ->add($id) ->add($authorId) ->add($title) ->add($permalink) ->add($excerpt) ->add($content) ->add($metaTitle) ->add($metaKeywords) ->add($metaDescription) ->add($categories) ->add($status) ->add($keywords) ;} } 
Thanks in advance