2016-11-03 48 views
1

我正在使用框架Phalcon。我试图创建一个表格,以从名为cliente的表(在mysql中)获得一个值(ID为“idcliente”),该表有两列:“idcliente”和“nombre”。有了这个值,我想在另一个名为Users的表上更新一个字段(也称为“idcliente”)。使用下拉式表格在Phalcon上不起作用

我的形式是这样的:

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); 
    } 
} 

而且我的控制器:

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; 
} 

而我的观点:

 <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> 

我在网站上的以下错误:

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

其中第31行是{{ form.render('idcliente', ['class': 'form-control']) }} 在我看来

我还没有找到如何创建一个形式选择足够的资料,尽管我已经创造了很多形式。

如果有人能帮助我,我会很感激。谢谢。

+1

一个问题:为什么你遍历你看你的表单元素?你没有在循环中使用'element'变量。现在,您只需输出'idcliente'元素x次!还是仅仅为了调试目的? – Timothy

+0

@蒂莫西良好的观察。我刚刚复制了我在Web中找到的示例。但是你是对的,在我的其他形式中,我没有for循环。谢谢:D已经出来。 –

回答

1

您的表单中的元素定义Asignarclienteform不正确。 Select的第一个参数必须是一个字符串(元素的名称)。 第二个参数采用您选择的元素的选项。

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

我感动idcliente出数组到第一个参数的位置是:

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

谢谢!现在错误发生了变化: '可捕获的致命错误:类Phalcon \ Mvc \ Model \ Resultset \ Simple的对象无法转换为C:\ xampp \ htdocs \ OpinionZoom \ cache \ volt \ c %%%% xampp% %htdocs %% opinionzoom %% app %% views %% admin %% asignarcliente.volt.php on line 28' –

+0

我刚刚更新了我的问题:D –

+0

您确定您的代码和错误消息是最新的,因为它现在没有意义..? 'form'不是'Phalcon \ Mvc \ Model \ Resultset \ Simple'类型。或者是? – Timothy