使用Laravel 5.5登录后传递共享变量

时间:2018-05-23 13:08:26

标签: model-view-controller laravel-5.5

我创建了一个方法,以便与我的应用程序的所有视图共享数据。

为此,我创建了一个EntityRepository类,其中我存储了我想与所有视图共享的数据。

这些数据显示在布局中而不是视图中。

class EntityRepository
{
    use App\Valuechain;

    public function getEntities()
    {
        $vcs = Valuechain::select('valuechains.id', 'lang_valuechain.vcname', 'lang_valuechain.vcshortname')
            ->join('lang_valuechain', 'valuechains.id', '=', 'lang_valuechain.valuechain_id')
            ->join('langs', 'lang_valuechain.lang_id', '=', 'langs.id')
            ->where('langs.isMainlanguage', '=', '1')
            ->whereNull('valuechains.deleted_at')
            ->get();
        return $vcs;
    }
}

当我想将数据发送到方法时,我只需调用getEntities()方法...例如:

public function index(EntityRepository $vcs)
{
    $entitiesLists = $vcs->getEntities();

    // My code here ...
    return view('admin.pages.maps.sectors.index', compact('entitiesLists', 'myVars'));
}

在这个特定的情况下它工作正常,我没有问题。我的问题涉及登录后的登录页面。

在loginController中:

我用这种方式定义了redirectTo变量:

public $redirectTo = '/admin/home';

由于特定原因,我必须覆盖LoginController中的authentificated()方法,以检查我的应用程序是否已配置或需要设置...

protected function authenticated(Request $request, $user)
{

    $langCount = Lang::count();
    if ($langCount == 0) {
        return redirect()->to('admin/setup/lang');
    }
    else {
        //return redirect()->to('admin/home');
        return redirect()->action('BackOffice\StatsController@index');
    }
}

有关的index()方法是将变量发送到视图:

public function index(EntityRepository $vcs)
{
    $entitiesLists = $vcs->getEntities();
    return view('admin.home', compact('entitiesLists'));
}

无论我做什么回报我都有错误信息......

未定义的变量:entitiesLists(查看:C:\ wamp64 \ www \ network-dev \ resources \ views \ admin \ partials \ header-hor-menu.blade.php)

1 个答案:

答案 0 :(得分:0)

我终于通过改变我的路线解决了这个问题:

Route::group(['prefix' => 'admin'], function () {
    Route::get('/', function (){
        $checkAuth = Auth::guard('admin')->user();           
        if ($checkAuth) {
            return redirect('/admin/main');
        }
        else {
            return redirect('admin/login');
        }
    });
});

在我的loginController中,我改变了:

public $redirectTo = '/admin/home';

到:

public $redirectTo = '/admin/main';

最后:

protected function authenticated(Request $request, $user)
{

    $langCount = Lang::count();

    if ($langCount == 0) {
        return redirect()->to('admin/setup/lang');
    }
    else {
        return redirect()->to('admin/main');
    }
}