У меня странный сценарий. У меня есть несколько View Composers в этом моем проекте. До сих пор все они работали нормально, но сегодня я изменил способ присвоения значения одной из переменных, которые я отправляю из composer, соответствующему представлению. Я не изменил имя переменной или поставщика услуг Composer, или имя представления. Я только что изменил значение переменной.
Так что странно то, что она прекрасно работает в моей локальной среде (усадьба 8.0.1 через virtualbox на windows хосте), но когда я развертываюсь на предварительно В производственной среде (Windows Server 2016 с Apache 2.4) я получаю ошибку «Неопределенная переменная» для любой переменной, которую я пытаюсь отобразить в представлении.
Если кто-либо знает, может ли сервер играть роль в том, как называются или исполняются View Composers, я был бы признателен за ваше просвещение. Вот мой код (хотя и немного упрощенный):
- Просмотр фрагмента (без изменений):
<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 к этому предварительному серверу ) и повторно загрузить весь проект в случае отсутствия зависимостей (?) или чего-то еще, но все же не повезло.