簡體   English   中英

調用數組上的成員 function toArray()

[英]Call to a member function toArray() on array

我正在嘗試使用這個 package: https://packagist.org/packages/digital-creative/conditional-container 但是對於這個基本示例:

    return array_merge(
        [

            Select::make('Option', 'option')
              ->options([
                  1 => 'Option 1',
                  2 => 'Option 2',
                  3 => 'Option 3',
              ]),

        /**
         * Only show field Text::make('Field A') if the value of option is equals 1
         */
        ConditionalContainer::make([ Text::make('Field A') ])->if('option = 1'),
        Text::make('Title'),
        Textarea::make('Description'),
        ],
        $arr
    );

我收到錯誤消息: Call to a member function toArray() on array

如果我改為:

return array_merge(
            [

                [
                    Select::make('Option', 'option')
                  ->options([
                      1 => 'Option 1',
                      2 => 'Option 2',
                      3 => 'Option 3',
                  ]),
                  ConditionalContainer::make([ Text::make('Field A') ])->if('option = 1')
                ],

表明:

message: "Call to a member function getUpdateRules() on array"

即使只有下面的示例,它也會顯示“消息:”調用數組上的成員 function toArray()“:

 public function definition(): array
    {
        return [
                    Select::make('Option', 'option')
                  ->options([
                      1 => 'Option 1',
                      2 => 'Option 2',
                      3 => 'Option 3',
                  ]),
                  
                  ConditionalContainer::make([ Text::make('Field A') ])->if('option = 1')
                ];
    }

你知道如何解決這個問題嗎? 謝謝!

不確定是做什么的,但您正在向 class 發送一個數組,class 有一個方法 toArray()。

這就是為什么我總是在我的代碼中使用返回類型,因為如果輸入不匹配,它就會中斷。

會不會是它認為這是一個集合或者一個class需要輸入。

在某些情況下,我很懶,會嘗試以下方法:

collect(return array_merge(
            [

                [
                    Select::make('Option', 'option')
                  ->options([
                      1 => 'Option 1',
                      2 => 'Option 2',
                      3 => 'Option 3',
                  ]),
                  ConditionalContainer::make([ Text::make('Field A') ])->if('option = 1')
                ],)

因為許多包使用 Collection 作為處理、過濾和搜索數組的方式。

但這更多的是猜測而不是實際知識。 查看vendor map中的function getUpdateRules(),它是做什么的。

/**
     * @param Resource|Model $resource
     *
     * @return array
     */
    public function resolveDependencyFieldUsingResource($resource): array
    {

        $matched = $this->runConditions(
            $this->flattenRelationships($resource)
        );

        return $matched ? $this->fields->toArray() : [];

    }

這是 function,您可以看到它需要 model 或資源 class

根據文檔:

return [
    
            Select::make('Option', 'option')
                  ->options([
                      1 => 'Option 1',
                      2 => 'Option 2',
                      3 => 'Option 3',
                  ]),
    //more suff

你的返回數組

array_merge(
            [ // <--- note the extra bracket

                [
                    Select::make('Option', 'option')
                  ->options([
                      1 => 'Option 1',
                      2 => 'Option 2',
                      3 => 'Option 3',
                  ]),
                  ConditionalContainer::make([ Text::make('Field A') ])->if('option = 1')
                ],
    

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM