sco*_*s93 2 php laravel laravel-5 laravel-5.2 laravel-blade
所以这就是我想要实现的目标.我有一个默认的刀片模板default.blade.php,它由我的所有子视图扩展.
在我的内部default.blade.php有一个foreach循环,它向用户表达一些"全局"选项,其示例如下.
@foreach ($projects as $p)
<li><a href='$p->project_uid'>{{ $p->project_name }}</a></li>
@endforeach
Run Code Online (Sandbox Code Playgroud)
所以要实现这一点,我必须通过我的控制器中$projects的view('viewname', $data)或通过传递变量View::share('projects', $projects);__construct()
我是否有更好的方式在全球意义上做到这一点,以便不需要进行上述调用?
我所知道的一个选项是在我的视图中调用Model函数,但这违背了MVC的概念,因此并不理想.
任何有关该主题的指导将不胜感激,谢谢.
所以我尝试了ViewComposer解决方案,但遇到了一些问题.以下是我的作曲家和服务提供商注册.
配置/ app.php
App\Providers\ComposerServiceProvider::class,
Run Code Online (Sandbox Code Playgroud)
ComposerServiceProvider
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ComposerServiceProvider extends ServiceProvider {
/**
* Register bindings in the container.
*
* @return void
*/
public function boot() {
// Using class based composers...
view ()->composer ( 'default', 'App\Http\ViewComposers\MasterComposer' );
}
/**
* Register the service provider.
*
* @return void
*/
public function register() {
//
}
}
Run Code Online (Sandbox Code Playgroud)
MasterComposer
<?php
namespace App\Http\ViewComposers;
use Illuminate\View\View;
use App\Repositories\UserRepository;
use Sentinel;
use ProjectUsers;
class MasterComposer
{
protected $users;
public function __construct(ProjectUsers $users)
{
$uid = Sentinel::getUser()->id;
$this->users = ProjectUsers::where("user_id", '=', $uid)->get();
}
public function compose(View $view)
{
$view->with('projects', $this->users);
}
}
Run Code Online (Sandbox Code Playgroud)
我错过了一些明显的东西,因为它似乎根本就没有装载Composer.
我自己修好了.意识到在ComposerServiceProvider中我需要像这样指定我的视图的完整路径.
view ()->composer ( 'admin/layouts/default', 'App\Http\ViewComposers\MasterComposer' );
Run Code Online (Sandbox Code Playgroud)
现在它起作用:D
是的,您使用View Composer执行此操作.
视图组合器是在呈现视图时调用的回调或类方法.如果每次呈现视图时都希望将数据绑定到视图,则视图编写器可以帮助您将该逻辑组织到一个位置.
绑定要defualt.blade.php查看的数据,例如:
public function compose(View $view)
{
$data = .... // Get data here.
$view->with('projects', $data);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
821 次 |
| 最近记录: |