【问题标题】:Get input values from backend form [octobercms]从后端表单获取输入值 [octobercms]
【发布时间】:2019-08-09 23:11:24
【问题描述】:

除了$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

【问题讨论】:

    标签: octobercms octobercms-plugins octobercms-backend


    【解决方案1】:

    尝试将select('id','start_date') 替换为all() 或find($result),如果您只想获取开始日期,请使用pluck-&gt;('start_date')。似乎您不能在我的测试中有意义的雄辩模型上使用 select。

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

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

    但是,当我通过普通集合查询方法访问模型时,我得到了这个:

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

    最后,在您的情况下,您可以使用 $names = Products::find('1')-&gt;pluck('name')-&gt;first(); 替换 1 和 $result 和 'name' 和 'start_date'。

    【讨论】:

    • 原始发帖人遇到的问题不是查询的问题,而是将用户的输入插入查询的问题。
    • @Luke 是的,获取用户输入的问题。
    • @Pettis 感谢您抽出宝贵时间 :) !!
    【解决方案2】:

    首先,您的问题是由于 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 字段中选择了有效选项。

    【讨论】:

    • 太棒了!!非常感谢卢克!就像你说在浏览器中生成的表单输入被命名为“Lesson[term]”所以我所要做的就是添加这一行 $term= post('Lesson[term]');一切正常。
    • 我认为您错过了我说您可以改为使用$this-&gt;term 的部分。那将是访问该值的更正确方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 2017-02-21
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多