【问题标题】:Laravel 5.6 View Composer not working on Windows with ApacheLaravel 5.6 View Composer 无法在带有 Apache 的 Windows 上运行
【发布时间】:2020-05-04 18:03:19
【问题描述】:

我遇到了一个奇怪的场景。我的这个项目中有几个 View Composer。到目前为止,它们都运行良好,但今天我改变了如何将值分配给我从作曲家发送到相应视图的变量之一。我没有更改变量或 Composer 服务提供者的名称,或视图的名称。我只是改变了变量的值。

所以奇怪的是,它在我的本地环境(通过 windows 主机上的 virtualbox 的宅基地 8.0.1)上工作得非常好,但是当我部署到预生产环境(带有 Apache 2.4 的 Windows Server 2016)时,我得到一个我尝试在视图中回显的任何变量的“未定义变量”错误。

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

  1. 查看 sn-p(未更改):
<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 缓存(因为我没有对该 pre-prod 服务器的 ssh 访问权限),并重新上传整个项目以防缺少依赖项(?)或其他东西还是没有运气。

【问题讨论】:

    标签: php laravel apache composer-php homestead


    【解决方案1】:

    具体来说,我无法弄清楚问题出在哪里。但是,因为我需要为其他事情执行此操作,所以我清除了所有缓存(包括存储文件夹中的所有内容——除了用户提交的文件),之后,视图编写器在预生产环境中正确检索了变量*shrugs* .

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

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

    如果其他人有不同的答案,请告诉我,我总是有兴趣学习新的东西。

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 2019-03-06
      • 2016-07-22
      • 1970-01-01
      • 2021-01-18
      • 1970-01-01
      • 2019-09-11
      • 2012-11-12
      • 1970-01-01
      相关资源
      最近更新 更多