【发布时间】:2020-05-04 18:03:19
【问题描述】:
我遇到了一个奇怪的场景。我的这个项目中有几个 View Composer。到目前为止,它们都运行良好,但今天我改变了如何将值分配给我从作曲家发送到相应视图的变量之一。我没有更改变量或 Composer 服务提供者的名称,或视图的名称。我只是改变了变量的值。
所以奇怪的是,它在我的本地环境(通过 windows 主机上的 virtualbox 的宅基地 8.0.1)上工作得非常好,但是当我部署到预生产环境(带有 Apache 2.4 的 Windows Server 2016)时,我得到一个我尝试在视图中回显的任何变量的“未定义变量”错误。
如果有人知道服务器是否可以参与 View Composer 的调用或执行方式,我将不胜感激。这是我的代码(虽然有点简化):
- 查看 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>
- 服务提供商(未更改):
<?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()
{
//
}
}
- 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,
]);
}
}
- 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