Laravel 5.6 View Composer 无法在 Windows 上使用 Apache

Laravel 5.6 View Composer not working on Windows with Apache

我遇到了一个奇怪的场景。我的这个项目中有几个 View Composer。到目前为止,它们都运行良好,但今天我更改了为从作曲家发送到相应视图的其中一个变量赋值的方式。我没有更改变量的名称或 Composer Service Provider,或视图的名称。我只是更改了变量的值。

所以奇怪的是,它在我的本地环境(windows 主机上通过 virtualbox 的 homestead 8.0.1)上运行得非常好,但是当我部署到预生产环境时(Windows Server 2016 with Apache 2.4),我尝试在视图中回显的任何变量都收到 "Undefined variable" 错误。

如果有人知道服务器是否可以在 View Composer 的调用或执行方式中发挥作用,我将不胜感激您的启发。这是我的代码(虽然有点简化):

  1. 查看片段(未更改):
<div class="col-sm-4">
  <div class="form-group">
    <label for="county">County:</label>
    <select class="js-select2 form-control" name="county" id="county" style="width: 100%;" data-placeholder="Choose a county">
      <option></option>
      @foreach ($county ?? array() as $k => $v)
        <option value="{{ $k }}">{{ $v }}</option>
      @endforeach
    </select>
  </div>
</div>
<div class="col-sm-4">
  <div class="form-group">
    <label for="state">State:</label>
    <select class="js-select2 form-control" name="state" id="state" style="width: 100%;" data-placeholder="Choose a state">
      <option></option>
      @foreach ($state ?? array() as $k => $v)
        <option value="{{ $k }}">{{ $v }}</option>
      @endforeach
    </select>
  </div>
</div>
  1. 服务提供商(未更改):
<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{

    public function boot()
    {
        View::composers([
          'App\Http\ViewComposers\MyComposer' => 'name.of.my.view',
          'App\Http\ViewComposers\OtherComposer' => ['one.view','another.view'], 
        ]);
    }

    public function register()
    {
        //
    }
}
  1. View Composer(之前):
<?php

namespace App\Http\ViewComposers;

use Illuminate\View\View;
use App\ApiRepo\Dir;

class DomiciliosClientesComposer
{
  protected $domi;

  public function __construct(Dir $domi)
  {
    $this->domi = $domi;
  }

  public function compose(View $view)
  {
    $state = $this->domi->firstFunction();
    $county = $this->domi->secondFunction();

    $view->with([
      'state' => $state,
      'county' => $county,
    ]);
  }
}
  1. View Composer(之后):
 <?php

    namespace App\Http\ViewComposers;

    use Illuminate\View\View;
    use App\ApiRepo\Dir;

    class DomiciliosClientesComposer
    {
      protected $domi;

      public function __construct(Dir $domi)
      {
        $this->domi = $domi;
      }

      public function compose(View $view)
      {
        $catalogues = [];
        foreach ($this->domi->newFunction() as $x) {
          $catalogues[$x["type"]][$x["id"]] = $x["value"];
        }

        $view->with([
          'domi' => array(),
          'zipcode' => array(),
          'state' => ($catalogues['state'] ?? array()),
          'county' => ($catalogues['county'] ?? array()),
        ]);
      }
    }

我尝试通过路由清除 artisan 缓存(因为我没有 ssh 访问该预生产服务器),并重新上传整个项目以防依赖项(?)丢失或一些东西,但仍然没有运气。

我不知道具体是什么问题。但是,因为我需要为其他事情做这件事,所以我清除了所有缓存(包括存储文件夹中的所有内容——用户提交的文件除外),之后,视图编辑器在预生产环境中正确检索了变量 *shrugs*.

我之前删除了 storage\framework\views 中的所有 PHP 个文件,但这没有帮助,所以我猜是其他临时文件搞砸了。

总之,底线:如果您遇到此问题,您可以尝试删除所有临时文件并清除所有缓存,这可能会解决问题, 如果您幸运的话。

如果其他人有不同的答案,请告诉我,我一直对学习新事物很感兴趣。