在哪里存储全球数据?

时间:2014-02-20 16:37:16

标签: php laravel laravel-4

我正在Laravel 4.1中编写这个小型博客平台,用于学习目的。我的第一个障碍是,我不知道应该在哪里放置全局数据(即动态博客设置,插件和主题数组),以便我可以从任何地方访问它们(类似于WordPress中的$ wpdb如何工作 - 我们只需要global $wpdb;才能访问它。

当然$ GLOBALS有效,但我们知道它是邪恶的,应该避免。此外,我希望尽可能像Laravel一样。

尝试过:

App::bind('settings', []); // error
App::instance('settings', []); // how to populate and retrieve it back?

有什么想法吗?提前谢谢。

2 个答案:

答案 0 :(得分:1)

如果这不是您需要在会话之间保留的内容,您可以使用:

Config::set('myglobals.name', 'An Phan');

然后

var_dump( Config::get('myglobals.name') );

但你也要思考一下,想想为什么你首先需要全局变量。看看这个:http://c2.com/cgi/wiki?GlobalVariablesAreBad

修改

这不是一种解决方法,这是Laravel提供的开箱即用的东西,您可以自己使用。通常,Config的目的是让应用程序使用配置文件,但有时您只需要在请求期间更改这些值,这就是Laravel提供set()方法的原因。

不幸的是,WP有一个旧的代码库,如果你正在尝试按照WP做事的方式做事,你就会走错路。

Laravel的方式取决于你想要用你的项目完成什么,所以你必须多说一点。

开始时的心态是:“我不需要全局变量”,当你到达需要全局的点时,你会问自己“如何在不使用全局的情况下做到这一点?”。

通常,如果您要设置要存储的设置,则只需要全局值。如果在请求期间必须使用它来设置状态,则需要使用对象。你可以在Laravel中拥有全局对象,你可以拥有单例(在整个应用程序中只有一个实例的对象),你可以创建属性对象:

class SidebarProperties {

    private $width;

    public function __construct($width)
    {
       $this->width = $width
    }

    public getWidth()
    {
       return $this->width;
    }

}

所以你有不计其数的方法来不使用全局变量,你只需要考虑你的项目并在那一刻选择最好的项目。

答案 1 :(得分:0)

嗯,如果你没有编写任何“生活”在Application上下文之外的东西,那么Laravel上下文中的全局意味着相对于Application。 有几种方法可以让您将数据提供给应用程序。但首先,你必须决定你需要什么样的“全局”?

首先也是最重要的规则是,除了特定于应用程序的文件夹结构之外,您所做的任何更改都必须告知作曲家。

其次,在不做任何更改的情况下,Laravel具有任何“普通”Web应用程序的大多数重要部分的默认位置。

应用程序文件夹结构非常具有描述性,但简而言之:

Configurations belongs to app/config
Models to app/models
Views to app/views
Controllers to app/controllers
Database to app/database
Routes to app/routes.php

如果您遵循这个基本结构,您可以创建出色的网络应用程序。这些文件夹和文件已经命名空间,并且其中的类是自动解析的。在您的示例中,您尝试将某些内容绑定到应用程序,这在您的情况下是多余的。如果要向现有结构添加一些新类和功能,则使用绑定到容器。

简而言之:

routes.php 中创建第一条路线,如下所示:

Route::get("GET",function(){
    return "my first route";
})

从那时起,遵循基本的MVC流程,这与大多数框架没有什么不同。 Laravel正在跟你说话,只是打开你的耳朵:) 如果你堆叠,只要问这里,有人会帮忙。