将数据放入主刀片 - Laravel

时间:2016-08-26 10:05:05

标签: php laravel blade

我已经看到了一些与我相似的问题,常见的答案是使用视图作曲家。我有一个HomeController,通过将查询数据传递给关联的视图来显示数据库中的文章,该视图有效see this image link

如您所见,有一个导航栏,由主布局layout.master。

生成

对于导航中的每个标题,我试图通过生成链接的for循环显示该部分的每篇文章。

我的代码就是这个。

public function index()
{
    $loans_articles = Article::byDepartment('Loans')->get();
    $digital_articles = Article::byDepartment('Digital')->get();
    $consulting_articles = Article::byDepartment('Consulting')->get();

    return view('welcome', 
        [
        'loans_articles' => $loans_articles, 
        'digital_articles' => $digital_articles, 
        'consulting_articles' => $consulting_articles, 
        ]);

}

正如您所看到的,我将此数据返回到欢迎刀片。

在我的导航栏中,我尝试了

@if(count($loans_articles) > 0)
            @foreach($loans_articles as $ls)

        <!--for each loop which grabs the articles with department Loans-->
        <li><a href="/article/{{ $ls->id }}">{{  $ls->title }}</a></li>

            @endforeach
        @endif

但是一旦您离开主页,导航栏就不知道$ loans_article是什么。

是否有一种干净的方法可以将此数据传递到主刀片导航,而无需将相同的数据发送到每个子视图?

4 个答案:

答案 0 :(得分:3)

我倾向于实现这一目标的方法是以这种方式为每个视图提供一个变量:

所有控制器都应扩展一个基本控制器,通常位于app/Http/Controllers/Controller.php。在这个控制器中,您可以放置​​一些将由所有扩展控制器使用的代码。

在这个基本控制器中,您可以为所有视图创建一个变量,例如......

class Controller extends BaseController
{
    public function __construct()
    {
        // Load your objects
        $loans_articles = Article::byDepartment('Loans')->get();

        // Make it available to all views by sharing it
        view()->share('loans_articles', $loans_articles);
    }
}

所有控制器必须扩展此控制器才能使其正常工作。

如果您的任何控制器都有自己的构造函数,您还必须确保调用parent::__construct()以确保运行上述代码。如果您的控制器没有自己的构造函数,则可以省略调用parent::__construct()

public class HomeController extends Controller
{
    public function __construct()
    {
        parent::__construct();

        // Your constructor code here..
    }
}

这样您就可以在所有视图中使用$loans_articles

答案 1 :(得分:1)

如果您想与所有刀片模板共享数据,一个简单的方法是通过 all_orders = Order.objects.filter(user_id = agent_id, delivery_Status="Pending", delivery_time__month = date, delivery_time__year = year).values(id, username=F(user__username)).annotate(total_amount = Sum('amount')).annotate(total_deliveries = Count('id)) appServiceProvider.php 方法。 您可以在 boot 中找到此文件并进行如下更改:

app/Providers/AppServideProvider.php

之后,您可以使用 namespace App\Providers; use Illuminate\Support\Facades\View; class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register() { // } /** * Bootstrap any application services. * * @return void */ public function boot() { View::share('key', 'value'); } }

访问所有刀片文件中的 value

注意:不要忘记在类的顶部使用 {{ $key }}

答案 2 :(得分:0)

您必须使用View Composer来实现您的目标:

https://laravel.com/docs/5.2/views

答案 3 :(得分:0)

<?php $contact = DB:table('tbl_contact')->get(); ?>

在顶部的master.blade.php中使用此代码 和 诸如

<a href='{{ $contact[0]->fbLink ? $contact[0]->fbLink : " " }}'>