【发布时间】:2018-10-16 02:56:25
【问题描述】:
我的 View Composer 将一些数据传递给某些视图(当然,它可以工作):
use Illuminate\View\View;
use App\Util\Helper
class PublicSettingsComposer
{
public function compose(View $view)
{
$view->with('settings', Helper::readSettingsFromFile()); // json
}
}
适当的提供者被添加到配置中,它为所有特定视图正确地提供了这个作曲家:
view()->compose('public.layouts.*', 'App\Http\ViewComposers\PublicSettingsComposer');
但是,在(仅)我的一个视图中,我需要来自数据库的特定信息,但因此我必须使用一些已由我的 View Composer 传递的数据:
class BranchController extends Controller
{
public function branches()
{
$settings = retrieve_settings_passed_by_PublicSettingsComposer; // This is what I need
$headquartersId = $settings->headquartersid;
return view('public.layouts.branches', [
'headquarters' => Branch::find($headquartersId) // Branch is a Model
]);
}
}
仅供参考:我使用的 Laravel 版本是:5.5
附: @moderators:请小心将我的问题视为重复问题。我知道关于视图编写器以及将数据传递给视图以及从控制器中获取数据有很多问题。但是,在这种情况下,我真的找不到任何问题(标题通常具有误导性)。
【问题讨论】:
-
是否有什么特殊原因不能简单地使用控制器中的视图编辑器中使用的
Helper::readSettingsFromFile()? -
目前我正在这样做。我只是想知道是否有(更好的)方法可以避免两次读取我的文件。所以,我认为可以在控制器中检索由 View Composer 传递的数据。
-
我对视图作曲家不太熟悉,但我假设如果您手动将视图作曲家包含在控制器中并且它也会自动附加到视图中,那么该文件也会被读取两次.因此我的建议是使用单例模式或在返回之前缓存
Helper::readSettingsFromFile()的读取数据。在并发方法调用上,您可以只返回缓存的数据。就像你对单身人士所做的那样。 -
谢谢。好主意。我也想过。但是,只有在对文件进行更改后重新读取数据(更新缓存)时,缓存数据才有意义。实施它只是时间问题。
-
那么,文件多久更改一次?也许我可以建议你一个非常非常简单和快速的解决方案。
标签: php laravel view controller