Laravel 4 如何访问laravel 4中的全局模型实例?
在Laravel4中,如何创建模型实例并使其全局可用?即使在视野中。我希望做一些类似于使用Auth::User->name(我的意思是语法,不存储在会话中)获取用户实例的方法,但在本例中,它将是ModelName::DefaultEntity->attribute 再详细一点 我正在写一个应用程序,将容纳多个网站-有点像一个CMS。所以我有一个网站模型。每个网站模型都有一个URL属性,因此当用户访问URL时,应用程序可以从数据库中检索网站模型,并适当地为网站添加品牌,例如标题、徽标、主题等 我希望当前的网站模型在任何地方都可用,而不必在每个控制器/方法中创建新的网站实例。因此,在我的布局和视图中,我可以这样说:Laravel 4 如何访问laravel 4中的全局模型实例?,laravel-4,Laravel 4,在Laravel4中,如何创建模型实例并使其全局可用?即使在视野中。我希望做一些类似于使用Auth::User->name(我的意思是语法,不存储在会话中)获取用户实例的方法,但在本例中,它将是ModelName::DefaultEntity->attribute 再详细一点 我正在写一个应用程序,将容纳多个网站-有点像一个CMS。所以我有一个网站模型。每个网站模型都有一个URL属性,因此当用户访问URL时,应用程序可以从数据库中检索网站模型,并适当地为网站添加品牌,例如标题、徽标、主题等 我希
{{ Website::Website()->name }}
或
我通过在网站模型中使用静态方法实现了第一个:
public static function current()
{
return Website::find(1); // just to test it for now
}
但这样一来,每次我说:
{{ Website::current()->name }}
而且感觉不对劲
有人能帮忙吗
亲切问候,
Robin您可能正在寻找“共享容器绑定”。看
创建普通类。比如现在的网站,网站或者其他什么的
class Website {
public function a() {
//your code
}
}
创建外观(websiteafacade.php)
创建服务提供商
use Illuminate\Support\ServiceProvider;
class WebsiteServiceProvider extends ServiceProvider {
public function register()
{
$this->app->bind('website', function()
{
return new Website();
});
}
}
4.转到您的config/app.php并添加以下内容:
'providers' => array(
'WebsiteServiceProvider'
)
及
5.Refrech自动装载机。现在,您可以在任何地方访问网站类,如下所示:
Website::a();
您已经拥有的很好,但是如果您只是想阻止每次执行该查询,您可以缓存它:
public static function current()
{
return Website::remember(10)->find(1); // just to test it for now
}
将侦听器添加到routes.php:
DB::listen(function($sql, $bindings, $time) { var_dump($sql); var_dump($bindings); });
并执行:
{{ Website::current()->name }}
将在第一次执行时显示查询,但在第二次执行时不显示查询,因为它是缓存的。我认为您不需要在这里做任何花哨的事情,我有点不清楚“全局”可用是什么意思。即使有了您所描述的,您仍然应该能够按预期使用Laravel。如果担心数据库调用,请不要使用website::current()->name
输出当前网站的名称,而是首先将模型存储到变量中<代码>$website=website::current()
,则无需第二次数据库调用即可执行$website->name
和$website->otherProperty
。对于人际关系,请查看渴望加载。您好,谢谢您的建议。当我说全局时,我的意思是我只想创建一个实例,我可以在我的路由、控制器、视图等中使用它,而不必手动将$website对象传递给其他所有类或视图。我希望这是有道理的。我想我想要的是一个外观,但我不知道在一个模型的实例中是否可能。谢谢,差不多就是这样,但我想在视图、控制器或路由中只说foo::name,而不必做App::make('foo');也许没有办法做我想做的事。
Website::a();
public static function current()
{
return Website::remember(10)->find(1); // just to test it for now
}
DB::listen(function($sql, $bindings, $time) { var_dump($sql); var_dump($bindings); });
{{ Website::current()->name }}