首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 5*雄辩的全球化

Laravel 5*雄辩的全球化
EN

Stack Overflow用户
提问于 2017-01-22 06:45:15
回答 3查看 196关注 0票数 2

伙计们,我是一个部分的_create-note-modal.blade.php,我试图与所有的页面共享这个部分,这是因为我把它包含在main.blade.php模板中。

问题:

这个_create-note.blade.php部分文件使用雄辩器从数据库中获取所有用户。这个用户变量需要与所有其他视图共享,因为它会出现错误。

我试过的是:

我试着在我的Controller.php上写这个。

代码语言:javascript
复制
$users = User::all();
View::share('users', $users);

问题是:

这是最好的方法吗?如果我有一个我想要分享的全部功能呢?

备注:

$users = User::all()拥有所有的用户,但实际上我的项目是一家公司的客户关系管理,它有25个用户,将来的用户不会超过100个,这是很难实现的。

此外,我返回所有的用户只是为了查看他们在<select><option>选择。

有更好的解决办法吗?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-01-22 07:05:40

实际上,我不建议您无限制地调用所有用户的数据。但你有几个选择。其中之一,您已经提供了,使用construct您可以在视图中调用您的用户变量。

选项1:

代码语言:javascript
复制
public function __construct(){
$users = User::all();
View::share('users', $users);
}

选项2

在controller.php中,您可以创建一个简单的函数

代码语言:javascript
复制
protected function getUsers(){
 return User::all();
}

然后,您可以在控制器中调用$this->getUsers。在此选项中,此查询将在您调用它时工作。

选项3

只需制作一个中间件并将其返回给控制器即可。

代码语言:javascript
复制
class getUsers {

    public function handle($request, Closure $next)
    {
      $users = User::all();
      $request -> attributes('users' => $users);

       return $next($request);
    }
}

在你的控制器里

代码语言:javascript
复制
 return Request::get('users');

更新

如果希望在属于此控制器的所有视图中的select下拉列表中加载用户,则可以使用第一个选项。但是您的查询应该是这样的:

代码语言:javascript
复制
$users =  Users::pluck('name', 'id');
View::share('users', compact('users'));

您可以轻松地在选择下拉列表中加载所有用户:

代码语言:javascript
复制
Form::select('users', $users, null);

如果要将用户的id标记为selected,则可以将其替换为null

但是,如果您想在某些视图中调用用户查询,我建议您使用第二个选项。

票数 1
EN

Stack Overflow用户

发布于 2017-01-22 06:56:03

这是个相当宽泛的问题。我不认为版主会接受它。要回答这个问题,你需要更多地了解这个应用程序。在一个只有几个视图的应用程序中,这段代码可能是可以的,在这个应用程序中,您总是显示该表单,并且假设总是有几个用户。这句话:

代码语言:javascript
复制
$users = User::all();

如果你有大量的用户存储,可能会非常有害。因此,我们可以谈论一天关于在视图中共享一些东西,另一天关于在所有视图中包含相同的形式,另一天总是发送所有用户的集合(这是一个选择器吗?自动完成?就为了把他们列出来?每一种情况都可能有不同的解决方案)

票数 0
EN

Stack Overflow用户

发布于 2017-01-22 07:29:52

在正式文档中有一节描述了这个确切的场景。

见:与所有视图共享数据App\Providers\AppServiceProvider.php应该已经存在于您的项目结构中,它是在安装程序运行时默认创建的。但是,我会非常小心,除非您确实需要在每个页面上使用这个查询,否则如果您添加了这样的几个全局数据库查询,它可以很容易地减缓站点的速度。

代码语言:javascript
复制
<?php

namespace App\Providers;

use Illuminate\Support\Facades\View;

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        View::share('key', 'value');
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
        //
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41788104

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档