json属性,转向变量然后转移到视图

时间:2014-05-25 02:20:09

标签: php laravel

我有一个带有自定义数据的json文件,一些游戏服务器的列表。 json文件包含名称和其他数据......

{
 "gameServer1": {
    "name": "game server",
    "ip": "game.gameservers.com",
    "port": "25565",
    "about": "About this game server",
    "nav": {
        "navigationLink1": {
            "name": "Forum",
            "link": "gameserver.com/someurl"
        }
    }
  // etc.. There would be quite a few other servers listed...
 }   
}

现在,在我的HomeController中(因为这是数据显示的地方)我很遗憾,我只有...

public function show()
{
    $this->layout->content = View::make('home')->with('servers', $this->getServers());
}

public function getServers(){
    $file = file_get_contents(app_path() . '/views/servers.json');
    $servers = json_decode($file);
    return $servers;
}

我很确定这是错的。我只是不知道如何正确地做到这一点。我需要做的是将属性传递给我的主视图

public function show()
{
    $this->layout->content = View::make('home')->with($this->getJSON());
}

所以我可以预测结果,并提供类似的内容......

    <div class="server">
        <h3 class="server-name">{{n $name }}</h3>
        <div class="ip-address">
            {{ $ipaddress }} 
        </div><!-- /.ip-address -->
        <div class="about-server">
            {{ $about }}
        </div><!-- /.about-server -->
        <div class="server-nav">
        <div class="nav-info">
            <strong>Quick Links</strong>
        </div>
            <ul>
                <li><a href="">{{links}}</a></li>

            </ul>
        </div>
 etc....
</div><!-- /.server-container -->

我觉得我甚至都不知道如何做到这一点。怎么办?

1 个答案:

答案 0 :(得分:1)

要将数据传递到您的视图,您应该在with方法中指定一个名称,以便使用该名称,您将能够访问视图中的数据,例如,您现在拥有以下代码:< / p>

$this->layout->content = View::make('home')->with($this->getJSON());

您需要为变量传递名称(任何内容),如下所示:

$this->layout->content = View::make('home')->with('servers', $this->getJSON());

现在,您可以通过引用$servers变量来访问视图中的数据。由于您的$servers变量将包含stdClass数组,因此您可以在视图中循环$servers变量,如下所示:

<div class="server">
  @foreach($servers as $server)
    <h3 class="server-name">{{ $server->name }}</h3>
    <div class="ip-address">
        {{ $server->ip }} 
    </div>
    <div class="about-server">
        {{ $server->about }}
    </div>
    <div class="server-nav">
    <div class="nav-info">
        <strong>Quick Links</strong>
    </div>
        <ul>
            @foreach($server->nav as $linkObj)
                <li><a href="{{ linkObj->link }}">{{ $linkObj->name }}</a></li>
            @endforeach
        </ul>
    </div>
  @endforeach
</div>

每个{{ }}都会打印$server->properties对象中的stdClass。这是Blade模板的示例,当您调用它时:

$this->layout->content = View::make('home')->with('servers', $this->getJSON());

框架在app/views/home.blade.php中查找视图,因此请确保您已在home.blade.php文件夹中创建了app/views视图文件。这只是一个简单的想法,但您需要read the documentation