【问题标题】:Passing an array from controller to view laravel using compact使用紧凑从控制器传递数组以查看 laravel
【发布时间】:2017-02-08 10:53:00
【问题描述】:

我正在使用 laravel 5.3(make:auth 自动注册和用户身份验证生成器),我想让用户在注册表单中选择他们的标签。

我想将$tags = App\Tag::all(); 传递给位于views\auth\register.blade.phpregister.blade.php 文件。

我找到了这个方法:

public function showRegistrationForm()
{
    return view('auth.register');
}

我想做:

public function showRegistrationForm()
{
    $tags = App\Tag::all();
    return view('auth.register', compact($tags));
}

但在尝试访问 register.blade.php 文件时,我得到未定义的变量 'tags'

【问题讨论】:

标签: php arrays laravel laravel-5.3


【解决方案1】:

不要提供变量本身,在使用compact 时提供变量名称。

return view('auth.register', compact('tags'));

【讨论】:

  • 或者只使用 vanilla 声明:return view('auth.register', array('tags' => $tags));
【解决方案2】:

首先你需要知道这一点:

模型视图控制器

控制器是中心点,即从模型中获取数据并将数据传递给视图或普通视图。那么这是什么意思:

public function showRegistrationForm()
    {
        return view('auth.register');
    }

这里返回一个普通视图。下面返回一个带有模型数据的视图,在你的情况下App\Tag:App\Tag::all() 是一个集合,即一个带有数据集的容器;

public function showRegistrationForm()
    {
        $tags = App\Tag::all();
        return view('auth.register', compact($tags));
    }

或者更好的是,而不是压缩数组,只需创建一个新数组并传递数据集,如何?

return view('auth.register', ['tags' => $tags]);

这是调试应用程序的方法:使用以下方法:

public function showRegistrationForm()
    {
        $tags = App\Tag::all();
        dd($tags);
        //return view('auth.register', compact($tags));
    }

您是否看到数组或错误?如果是数组,那么您的数据集将被传递给视图,如果不是,则存在模型不存在或其他错误,只需检查您的日志文件。

祝你好运。

【讨论】:

    【解决方案3】:

    如果你想使用紧凑,那么就这样使用

     return view('auth.register', compact('tags'));
    

    在 laravel 5.3 中,它们有如下变化,但即使你可以同时使用这两种方法 :)

    return view('auth.register', ['tags' => $tags]);
    

    【讨论】:

      猜你喜欢
      • 2017-03-03
      • 2017-07-27
      • 2015-12-27
      • 2021-04-19
      • 2015-01-20
      • 2017-10-12
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      相关资源
      最近更新 更多