从后端表单[octobercms]获取输入值

时间:2019-03-19 12:09:46

标签: octobercms octobercms-plugins octobercms-backend

这段代码在$result = Input::get('term');之外的一切工作正常,请有人帮助我获取字段term的输入值。当我这样做$result = 8;时,一切正常。

Form in plugin backend

在我的插件“课程”模型中

<?php

 namespace Cng\Tennis\Models;

 use Model;
 use Flash;
 use Db;
 use Input;
 use request;
 use Cng\Tennis\Models\Term as termModel;

 class Lesson extends Model
 {  
public function getSdateOptions () {

  $result = Input::get('term');
  $term = termModel::select('id','start_date')->where('id',  $result )->first();

   if ($this->term_id == $result ) { 
        return [$term->id => $term->start_date];   
    }
    else{
      return ['Select a date' => 'Select a date' ];
      }
    }

public function getFdateOptions () {
        return ['Select a date' => 'Select a date' ];
    }

以Yaml

    term:
        label: Term
        nameFrom: name
        descriptionFrom: description
        span: auto
        containerAttributes: {  }
        type: dropdown
        emptyOption: Select
        tab: 'Event Details'
        dependsOn:
            - location

    sdate:
        label: 'Start Date'
        mode: date
        span: left1
        cssClass: ''
        required: 1
        dependsOn:
            - term
        type: dropdown
        tab: 'Event Details'
        disabled: 1

2 个答案:

答案 0 :(得分:1)

首先,您的问题是由term字段在HTML中未命名的事实引起的。如果您在浏览器中或在触发dependsOn触发器时发送的AJAX请求中查看生成的表单输入,您会注意到term字段的实际字段名称前缀为表单小部件的别名(可能是Form,因此在这种情况下,实际的字段名称是Form[term])。

但是,您甚至根本不需要使用Input,您只需引用term字段直接在您的函数中引用的模型属性即可:

$options = [0 => 'Select a start date'];
$term = TermModel::find($this->term);

if ($term) {
    $options = [$term->id => $term->start_date];
}

return $options;

有关如何正确利用dependsOn属性的更多信息,请参见https://octobercms.com/docs/backend/forms#field-dependencies。请注意,在您的情况下,您可以将其与trigger属性结合起来以隐藏start_date字段,直到在term字段中选择了有效选项为止。

答案 1 :(得分:-1)

尝试将select('id','start_date')替换为all()find($result),如果只想获取开始日期,请执行pluck->('start_date')。看来您不能在雄辩的模型上使用select,这在我的测试中很有意义。

这是我在没有DB调用的情况下运行select时得到的:

    $names = Products::select('id','name')->where('id', 1);
    return $names;

enter image description here

但是,当我通过普通的集合查询方法访问模型时,会得到以下信息:

    $names = Products::all()->where('id', 1);
    return $names;

enter image description here

最后,您只能使用$names = Products::find('1')->pluck('name')->first();1替换为$result,将'name'替换为'start_date'