有没有更好的方法将变量发送到刀片?

时间:2014-05-28 14:14:39

标签: php laravel laravel-4 blade

我还在学习Laravel以及刀片系统是如何运作的。

我想知道更好的做事方式是什么,有些事情是这样的;我已经完成了从数据库中取出一行的查询,然后我想将该查询放入一个数组中,以便我可以选择我想要的任何列。

然后我想将其传递给我的home.blade.php,并且可以使用{{ $name }}作为示例。 Ť

这就是我所拥有的:

要注意:这是我想要的方式,但我确实我做了很长的路(错误)。

HomeController.php

<?php
class HomeController extends BaseController {
    public function home() {

        $hero_query = DB::table('heros')->where('owner_id', Auth::user()->id)->pluck('hero');

        if($hero_query) {
            $owner_id = Auth::user()->id;
            $user = DB::table('heros')->where('owner_id', $owner_id)->first();

            $name = $user->hero;
            $level = $user->level;
            $exp = $user->exp;
            $str = $user->str;
            $atk = $user->atk;
            $def = $user->def;
            $int = $user->int;
            $blk = $user->blk;


            return View::make('home', array(
                'name'  => $name,
                'level' => $level,
                'exp'   => $exp,
                'str'   => $str,
                'atk'   => $atk,
                'def'   => $def,
                'int'   => $int,
                'blk'   => $blk
            ));
        } else {
            return View::make('home');
        }
    }
}

home.blade.php

@if($hero = DB::table('heros')->where('owner_id', Auth::user()->id)->pluck('hero'))  
                <form action="{{ URL::route('hero-delete') }}" method="POST">
                    Your hero:<br> 
                    <b>{{ $hero; }}</b> | <input type="submit" value="Delete"><br>
                    <b>Stats:</b> 
                        LvL: {{ $level }}
                        Exp: {{ $exp }}
                        Str: {{ $str }}
                        Atk: {{ $atk }}
                        Def: {{ $def }}
                        Int: {{ $int }}
                        Blk: {{ $blk }}
                </form>
            @else
                <form action="{{ URL::route('hero-create') }}" method="POST">
                    Hero:<br>
                    You do not have a hero, create one!
                    <input type="text" name="hero">
                    <input type="submit" value="Create hero">

                    @if($errors->has('hero'))
                        {{ $errors->first('hero')}}
                    @endif

                    {{ Form::token()}}
                </form>
            @endif

现在我确定我会以一种愚蠢的愚蠢方式做这件事,因为我刚开始......但有人可以解释我出错的地方吗?

提前致谢!

2 个答案:

答案 0 :(得分:4)

只需将整个$user传递给视图

即可
$user = DB::table('heros')->where('owner_id', $owner_id)->first();
return View::make('home', array('user' => $user));

然后在你看来

Str: {{ $user->str }}
Int: {{ $user->int }}

等等。

答案 1 :(得分:0)

你犯了很多错误:(

我修改了一些代码,但我没有对其进行测试,因此请将其作为实现所需内容的指南。

class HomeController extends BaseController {

    public function home() {

        $hero = Hero::where('owner_id', '=', $owner_id)->first();

        if($hero)
        {   
            return Response::make('home', array('hero' => $hero->toArray()));
        }
        else
        {
            return Response::make('home');
        }
    }
}

刀片模板

@if(isset($hero))
    {{ Form::open(array('route' => 'hero-delete', 'method' => 'DELETE')) }} 
        Your hero:<br> 
        <b>{{ $hero->hero }}</b> | <input type="submit" value="Delete"><br>
        <b>Stats:</b> 
        <!-- Here you can implement a foreach for performance -->
            LvL: {{ $hero->level }}
            Exp: {{ $hero->exp }}
            Str: {{ $hero->str }}
            Atk: {{ $hero->atk }}
            Def: {{ $hero->def }}
            Int: {{ $hero->int }}
            Blk: {{ $hero->blk }}
    {{ Form::close() }}
@else
    {{ Form::open(array('route' => 'hero-create')) }}
        Hero:<br>
        You do not have a hero, create one!
        <input type="text" name="hero">
        <input type="submit" value="Create hero">

        @if($errors->has('hero'))
            {{ $errors->first('hero')}}
        @endif
    {{ Form::close() }}
@endif