【问题标题】:Laravel compact pass class variableLaravel 紧凑传递类变量
【发布时间】:2021-05-26 15:46:10
【问题描述】:

有没有办法使用 Laravel 的紧凑方法传递类变量?

下面,我有$fields 变量,它通过构造方法初始化。

class EventTypeController extends Controller
{
    protected $fields;

    public function __construct()
    {
        $this->fields = Fields::all();
    }

    ...

现在有没有办法使用紧凑方法传递上述变量?我试着像往常一样直接输入变量名,但是没有用。

/**
 * Display a listing of the resource.
 *
 * @return \Illuminate\Http\Response
 */
public function index()
{
    $event_types = EventType::all(); 
    return view('event_types', compact('event_types', 'fields'));
}

【问题讨论】:

    标签: laravel


    【解决方案1】:

    compact 实际上返回一个数组,你可以返回一个显式数组:

    return view('event_types', ['event_types' => $event_types, 'fields' => $this->fields]);
    

    或者你可以使用array_merge:

    return view('event_types', array_merge(compact('event_types'), ['fields' => $this->fields]));
    

    【讨论】:

      【解决方案2】:

      compact(不是 Laravel 特定的函数)仅支持当前作用域中的变量,不能从对象属性中检索变量。

      您必须通过数组而不是 compact 提供来指定包含:

      return view('event_types', ['event_types' => $event_types, 'fields' => $this->fields]);
      

      【讨论】:

        【解决方案3】:

        您可以将变量分配给如下字段

        $fields=$this->fields;
        compact('event_types', 'fields'));
        

        根据官方 php 文档

        compact() 在当前符号中查找具有该名称的变量 表并将其添加到输出数组中,使得变量名 成为键,变量的内容成为 那把钥匙。简而言之,它与 extract() 的作用相反。

        https://www.php.net/manual/en/function.compact.php

        【讨论】:

          【解决方案4】:

          试试这个:

           return view('event_types', compact('event_types'))
          ->with("fields",$this->fields);
          

          【讨论】:

          • 可行。但我坚持使用紧凑型 Milad。
          • 我不认为这是可能的,但您可以将您的类变量设置为另一个变量,然后发送。 $variable2 = $this->fields; ....紧凑('variable2')
          猜你喜欢
          • 1970-01-01
          • 2017-02-08
          • 2019-02-14
          • 2019-05-26
          • 1970-01-01
          • 2010-12-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多