Form using dropdown doesn't work on Phalcon

I'm using the framework Phalcon. I'm trying to create a form to get a value (an ID called "idcliente") from a table (in mysql) called cliente, which has 2 columns: "idcliente" and "nombre". With this value I want to update a field (also "idcliente") on another table called Users.

My form is this:

class AsignarclienteForm extends Form{

    public function initialize($entity = null, $options = null){        
        $idcliente = new Select('idcliente',[
            Cliente::find(),
            "useEmpty"  =>  true,
            "emptyText" =>  "Please select...", 
            "using" => ["idcliente", "nombre"],
            ]);
        $idcliente->setLabel('ID Cliente');
        $idcliente->addValidators(array(
            new PresenceOf(array(
                'message' => 'idcliente is required'
                ))
            ));
        $this->add($idcliente);
    }
}

And my controller:

public function asignarclienteAction(){
    $auth = $this->session->get('auth');
    $permiso = $auth['active'];
    $id = $auth['id'];
    if($permiso!='A'){return $this->forward('servicios/index');}

    $form = new AsignarclienteForm;

    if ($this->request->isPost()) {
            $idcliente = $this->request->getPost('idcliente');
            $sql = "UPDATE Users SET idcliente = ?0 WHERE id = ?1";
            $this->modelsManager->executeQuery($sql, array(0 => $idcliente, 1 => $id));
            return $this->forward('admin/usuarios');
        }

    $this->view->form = $form;
}

And my view:

        <div class="panel-body">
            {{ form('admin/asignarcliente/', 'id': 'asignarclienteForm', 'onbeforesubmit': 'return false') }}
            <fieldset>
               <div class="control-group">
                {{ form.label('idcliente', ['class': 'control-label']) }}

                    <div class="controls">
                           {{ form.render('idcliente', ['class': 'form-control']) }}
                    </div>
                </div> 
                <div class="form-actions">
                    {{ submit_button('Asignar', 'class': 'btn btn-primary', 'onclick': 'return SignUp.validate();') }}
                </div>
            </fieldset>
        </form>
    </div>

I got the following error in the web site:

ID Cliente Catchable fatal error: Object of class Phalcon\Mvc\Model\Resultset\Simple could not be converted to string in C:\xampp\htdocs\OpinionZoom\cache\volt\c%%%%xampp%%htdocs%%opinionzoom%%app%%views%%admin%%asignarcliente.volt.php on line 31

Where line 31 is {{ form.render('idcliente', ['class': 'form-control']) }} on my view

I haven't found enough documentation of how to create a form with select, despite I have created a lot of forms.

If someone could help me I would appreciate it a lot. Thanks.

Upvotes: 1

Views: 707

Answers (1)

Timothy
Timothy

Reputation: 2003

Your element definition in your form Asignarclienteform is incorrect. The first parameter of Select must be a string (the name of your element). The second parameter takes the options of your select element.

// Select construct parameters
Select(string $name, [object | array $options], [array $attributes])

I moved idcliente out of the array into the first parameter position:

$idcliente = new Select('idcliente', Cliente::find(), [
    "useEmpty"  => true,
    "emptyText" => "Please select...",
    "using"     => ["idcliente", "nombre"],
]);

Upvotes: 1

Related Questions