当前位置: 首页 > 面试题库 >

如何在Laravel 5中将数据传递到所有视图?

丌官晔
2023-03-14
问题内容

我想在Laravel 5应用程序的所有视图中都可以访问一些默认数据。

我尝试搜索它,但仅找到Laravel 4的结果。我在这里阅读了文档“使用所有视图共享数据”
,但我不知道该怎么做。以下代码应放在哪里?

View::share('data', [1, 2, 3]);

谢谢你的帮助。


问题答案:

这个目标可以通过不同的方法来实现,

1.使用BaseController

我喜欢设置的方式,我制作了一个BaseController扩展Laravel自己的类Controller,并在那里设置了各种全局性的东西。然后,所有其他控制器都从BaseControllerLaravel的控制器扩展而来。

class BaseController extends Controller
{
  public function __construct()
  {
    //its just a dummy data object.
    $user = User::all();

    // Sharing is caring
    View::share('user', $user);
  }
}

2.使用过滤器

如果您知道要为整个应用程序中的每个请求的视图设置某种事实,那么您也可以通过在请求之前运行的过滤器来进行设置-
这就是我在Laravel中处理User对象的方式。

App::before(function($request)
{
  // Set up global user object for views
  View::share('user', User::all());
});

要么

您可以定义自己的过滤器

Route::filter('user-filter', function() {
    View::share('user', User::all());
});

并通过简单的过滤器调用对其进行调用。

根据版本5更新。*

3.使用中间件

View::share一起使用middleware

Route::group(['middleware' => 'SomeMiddleware'], function(){
  // routes
});



class SomeMiddleware {
  public function handle($request)
  {
    \View::share('user', auth()->user());
  }
}

4.使用View Composer

View
Composer还可以帮助绑定特定数据以不同方式进行查看。您可以将变量直接绑定到特定视图或所有视图。例如,您可以根据需要创建自己的目录来存储视图编辑器文件。并且这些视图组成文件通过Service提供与视图的交互。

View Composer方法可以使用不同的方式,第一个示例可以类似:

您可以创建一个App\Http\ViewComposers目录。

服务提供者

namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
    public function boot() {
        view()->composer("ViewName","App\Http\ViewComposers\TestViewComposer");
    }
}

之后,将此提供程序添加到config / app.php的“ providers”部分下。

TestViewComposer

namespace App\Http\ViewComposers;

use Illuminate\Contracts\View\View;

class TestViewComposer {

    public function compose(View $view) {
        $view->with('ViewComposerTestVariable', "Calling with View Composer Provider");
    }
}

ViewName.blade.php

Here you are... {{$ViewComposerTestVariable}}

此方法仅对特定视图有用。但是,如果要触发ViewComposer到所有视图,我们必须将此单个更改应用于ServiceProvider。

namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class ViewComposerServiceProvider extends ServiceProvider {
    public function boot() {
        view()->composer('*',"App\Http\ViewComposers\TestViewComposer");
    }
}


 类似资料:
  • 在使用PingFederate进行单点登录期间,我需要将数据从一个系统传递到另一个系统。 目前我的链接如下所示: 目标资源,解码,如下所示: pingfederate处理请求后,它最终会向其他公司发送一封邮件,将整个TargetResource复制到RelayState、params和all中: 我的目标是以某种方式将 paramOne 和 paramTwo 传递到 SAML 属性中,但不要将这些

  • 我有一个使用ExpressJS构建的NodeJS应用程序。在安全审查之后,有人建议我在所有表单和ajax提交上实现CSRF。为此,我使用了csurf包。为此,我们需要在每个表单页面中传递CSRF令牌,然后将其与表单提交数据一起返回。 首先,我尝试对包含表单的页面单独执行此操作。但后来我意识到我的页面标题中有一个搜索表单,它出现在所有页面上。现在,是否有任何方法可以将CSRF令牌传递给我的所有视图,

  • 我创建了一个新的电子应用程序。 在索引中。jsi使用节点文件系统加载数据 如果我试着使用require。JSIT之所以能够工作,是因为它运行在不同的线程上,而不是使用节点进行初始化,更像是一个实际的浏览器窗口。但有没有办法从索引中传递数据呢。js到main。js 我不知道我对这个问题的看法是否部分正确 如果您需要更多代码或信息,请询问!

  • 问题内容: 我的应用程序调用了一个返回字典的API。我想将信息从此字典传递给视图中的JavaScript。具体来说,我在JS中使用Google Maps API,因此我希望向其传递包含长/短信息的元组列表。我知道会将这些变量传递给视图,以便可以在HTML中使用它们,但是如何将它们传递给模板中的JavaScript? 问题答案: 将几乎所有Python对象都转换为JavaScript对象的理想方法是

  • 我的应用程序调用一个返回字典的API。我想将这个dict中的信息传递给视图中的JavaScript。我在JS中特别使用了Google Maps API,所以我想传递给它一个包含long/lat信息的元组列表。我知道会将这些变量传递给视图,以便它们可以在HTML中使用,但是我如何才能在模板中将它们传递给JavaScript呢?

  • 问题内容: 我想将一些数据传递给$ mdDialog。实际上,我在一个单独的文件中有两个控制器。这是我的控制器代码 我想tp将profileId传递给profileController并显示配置文件数据。在配置文件控制器中,我以此获取数据 但是这个错误出现在控制台中 这是什么错误以及如何解决? 问题答案: 我添加了配置文件模板,这是由于错误。通过删除它,我的问题解决了。