Laravel 5.6 Просмотр Composer не работает на Windows с Apache - PullRequest
2 голосов
/ 17 января 2020

У меня странный сценарий. У меня есть несколько View Composers в этом моем проекте. До сих пор все они работали нормально, но сегодня я изменил способ присвоения значения одной из переменных, которые я отправляю из composer, соответствующему представлению. Я не изменил имя переменной или поставщика услуг Composer, или имя представления. Я только что изменил значение переменной.

Так что странно то, что она прекрасно работает в моей локальной среде (усадьба 8.0.1 через virtualbox на windows хосте), но когда я развертываюсь на предварительно В производственной среде (Windows Server 2016 с Apache 2.4) я получаю ошибку «Неопределенная переменная» для любой переменной, которую я пытаюсь отобразить в представлении.

Если кто-либо знает, может ли сервер играть роль в том, как называются или исполняются View Composers, я был бы признателен за ваше просвещение. Вот мой код (хотя и немного упрощенный):

  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>
Поставщик услуг (не был изменен):
<?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()
    {
        //
    }
}
Просмотр 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,
    ]);
  }
}
Просмотр 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()),
        ]);
      }
    }

Я попытался очистить кэш ремесленника по маршруту (потому что у меня нет доступа * sh к этому предварительному серверу ) и повторно загрузить весь проект в случае отсутствия зависимостей (?) или чего-то еще, но все же не повезло.

1 Ответ

0 голосов
/ 22 января 2020

Я не мог понять, в чем конкретно проблема. Но, поскольку мне нужно было сделать это для чего-то другого, я очистил весь кэш (включая все, что находится в папке хранилища - кроме файлов, отправленных пользователем), и после этого представление composer правильно извлекло переменные в подготовительной среде *shrugs*.

Ранее я удалил все PHP файлы в хранилище \ framework \ views, но это не помогло, поэтому я предполагаю, что какой-то другой временный файл испортил все.

В любом случае, нижняя строка: Если вы столкнулись с этой проблемой, вы можете попробовать удалить все временные файлы и очистить весь кеш, и это может помочь, , если вам повезет.

Если у кого-то есть другой ответ, пожалуйста, дайте мне знать, мне всегда интересно узнавать что-то новое.

...