Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 无法通过ViewComposer将集合传递给视图_Php_Laravel_Laravel 5.2 - Fatal编程技术网

Php 无法通过ViewComposer将集合传递给视图

Php 无法通过ViewComposer将集合传递给视图,php,laravel,laravel-5.2,Php,Laravel,Laravel 5.2,我有一个视图生成器: namespace App\Http\ViewComposers; use Illuminate\Contracts\View\View; use App\Models\FloatingMenu; class FloatingMenuComposer { protected $floatingMenu; public function __construct() { // Dependencies automatically resolv

我有一个视图生成器:

namespace App\Http\ViewComposers;

use Illuminate\Contracts\View\View;
use App\Models\FloatingMenu;

class FloatingMenuComposer {

  protected $floatingMenu;

  public function __construct()
   {
       // Dependencies automatically resolved by service container...
       $this->floatingMenu = FloatingMenu::all();
   }


    public function compose(View $view) 
    {
       $floatingMenuItems = null;
       foreach($this->floatingMenu as $menu){
         if ($view->getName() == $menu->page) {
           $floatingMenuItems = $menu->floatingMenuItems()->get();
         }
       }
       $view->with('floatingMenuItems' , $floatingMenuItems);
    }
}
如果在视图中转储$floatingMenuItems变量,则会得到null。但是,如果我在compose()函数中转储$floatingMenuItems变量,它肯定包含一个数据集合

如果我突然跳出来:

$view->with('floatingMenuItems' , $floatingMenuItems);
与:

然后,当我转储$floatingMenuItems变量时,它在视图中打印出随机字符串。因此,出于某种原因,它不允许我通过视图生成器将集合传递给视图


我该如何解决这个问题?

在if语句中更改返回视图的位置。(因为它只执行一次)


更改返回视图在if语句中的位置。(因为它只执行一次)

在我看来:
1.在compose()函数中,$floatingMenuItems变量转储到哪里?内部foreach还是外部foreach?
2.您应该在获取floatingMenuItems后中断foreach设置
试试看

在我看来:
1.在compose()函数中,$floatingMenuItems变量转储到哪里?内部foreach还是外部foreach?
2.您应该在获取floatingMenuItems后中断foreach设置


试试看

不确定该问题,但您可以尝试传递
$floatingMenuItems->toArray()
,并检查它是否在视图中可用。我也有视图生成器,它在我的视图中将模型数据作为一个集合传递,从来没有看到过这个问题。@jaysingkar然后由于“调用null上的array()成员函数”而失败。奇怪的是,如果我在此之前转储变量,它会显示集合。在for each循环中,if()语句执行了多少次?一次或多次?不确定这是否有效,但您可以尝试将
null
更改为
$floatingMenuItems=collect()
;不确定该问题,但您可以尝试传递
$floatingMenuItems->toArray()
,并检查它是否在视图中可用。我也有视图生成器,它在我的视图中将模型数据作为一个集合传递,从来没有看到过这个问题。@jaysingkar然后由于“调用null上的array()成员函数”而失败。奇怪的是,如果我在此之前转储变量,它会显示集合。在for each循环中,if()语句执行了多少次?一次或多次?不确定这是否有效,但您可以尝试将
null
更改为
$floatingMenuItems=collect()
;这不会有什么不同。实际上,原始代码更干净、更标准。@MinaAbadir我知道这不是一种标准化的方法,但这是存储值的唯一方法。我试图阅读有关PHP变量scope的内容,但在传递到视图时找不到可能导致变量为null的原因。@MinaAbadir我回答了此更改,因为它将在代码中保留变量值。您对变量作用域的关注将得到极大的赞赏。只要它在同一个函数中,作用域就不会成为问题。将视图返回到if中,解决了问题。这对我来说毫无意义,因为范围在这里不应该是一个问题。这不会有什么区别。实际上,原始代码更干净、更标准。@MinaAbadir我知道这不是一种标准化的方法,但这是存储值的唯一方法。我试图阅读有关PHP变量scope的内容,但在传递到视图时找不到可能导致变量为null的原因。@MinaAbadir我回答了此更改,因为它将在代码中保留变量值。您对变量作用域的关注将得到极大的赞赏。只要它在同一个函数中,作用域就不会成为问题。将视图返回到if中,解决了问题。这对我来说毫无意义,因为范围在这里不应该是一个问题。
$view->with('floatingMenuItems' , "Random String");
public function compose(View $view) 
    {
       $floatingMenuItems = collect(); //remove this
       foreach($this->floatingMenu as $menu){
         if ($view->getName() == $menu->page) {
           //$floatingMenuItems = $menu->floatingMenuItems()->get();
           $view->with('floatingMenuItems' , $menu->floatingMenuItems()->get());
         }
       }       
    }