我是Laravel的新手,目前正在编写一个内部网应用程序,它基本上是一个包含大量信息的仪表板,使用Laravel 5.2,其中一个要求是能够导航到不同的商店。该应用的每个页面都需要商店的CODE。
目前我的所有表中都有一个列store_id,我使用GET和路由来检索这个值,如:
www.mysite.com/1/employees -> will list all employees from Store 1
www.mysite.com/1/employees/create -> will create employee to Store 1
www.mysite.com/2/financial -> will list all financial widgets with data from Store 2
我想从GET中删除我的STORE_ID,并使用我的topbar.blade.php中所有商店的DROPDOWN选项,例如:
<select>
<option selected>Store1</option>
<option>Store2</option>
</select>
每当有人选择&#34; Store1&#34;或者&#34; Store2&#34;,我想使用StoreController获取Store信息,并使这些变量可用于所有控制器和视图。我可以在哪里使用以下网址
www.mysite.com/employees -> will list all employees from "Depending of the SELECT"
www.mysite.com/employees/create -> will create employee to "Depending of the SELECT"
www.mysite.com/financial -> will list all financial widgets with data from "Depending of the SELECT"
我已经阅读了有关View Composer,Facades,ServiceProvide的内容,我对所有这些内容感到非常困惑。
答案 0 :(得分:1)
真的不是那么难。可能还有其他方法,但我更喜欢这样做:
分享数据:
打开app/Http/Controllers/Controller.php
并添加如下的aconstructor函数:
<?php
namespace App\Http\Controllers;
...
abstract class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
public function __construct()
{
$this->sharedVar = "I am shared.."; // to share across controllers
view()->share('sharedVar',$this->sharedVar); // to share across views
}
}
使用数据:
<强> 1。在控制器中:
所有控制器都扩展了上述控制器。因此,所有控制器都可以使用该属性:
class YourController extends Controller
{
public function index()
{
dd($this->sharedVar);
}
...
}
<强> 2。在视图中:
{{$sharedVar}} // your-view.blade.php
修改强>
如果要将数据共享到控制器和视图以外的位置,最好的方法可能是使用AppServiceProvider
:
打开app/Providers/AppServiceProvider.php
并更新boot()
方法:
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
$this->app->singleton('sharedVariable', function () {
return "I am shared";
});
}
...
}
用法:
dd(app('sharedVariable')); // anywhere in the application
答案 1 :(得分:1)
您还可以从提供商处共享公共数据,例如。 AppServiceProvider
或您自己的提供商。
我在这里使用AppServiceProvider
例如。
在AppServiceProvider
启动方法中:
public function boot()
{
$this->passCommonDataToEverywhere();
}
现在写下方法:
protected function passCommonDataToEverywhere()
{
// Share settings
$this->app->singleton('settings', function() {
return Setting::first();
});
view()->share('settings', app('settings'));
// Share languages
$this->app->singleton('languages', function() {
return Language::orderBy('weight', 'asc')->get();
});
view()->share('languages', app('languages'));
}
在这个例子中,我必须使用:
use App\Language;
use App\Setting;
答案 2 :(得分:0)
我想知道,如果可能的话:
-- StoreController
public function BindStore($id)
{
$store = Store::where('id', $id);
App::singleton('store', $store);
}
或者可能使用服务