1

MongoDB と FuelPHP を使用しています。MongoDB に正常に接続し、データを抽出できます。ビューにデータを挿入する方法を理解するために、すでに 3 日間を費やしました。私の見解は次のとおりです。

<body>
<div class="middle">
    <p><?php if (isset($_id)){echo $_id;} ?></p>
    <p><?php if (isset($first_name)){echo $first_name;} ?></p>
    <p><?php if (isset($last_name)){echo $last_name;} ?></p>
</div>
</body>

私のコントローラーは:

class Controller_Home extends Controller {

public function action_index()
{
    $data['css'] = Asset::css(array('reset.css','main.css'));
    $results = Model_Home::get_results();

            //I thought all I have to do is this foreach loop and it would work
    foreach($results as $row => $val){
        $data = $val;
    }

    $this->response->body = View::factory('home/index', $data);
}
}

私の var_dump() は次のとおりです。

        object(stdClass)#10 (2) {
      [0]=>
      array(5) {
        ["_id"]=>
        object(MongoId)#13 (1) {
          ["$id"]=>
          string(24) "4ef82a27b238f02ed9000000"
        }
        ["cms"]=>
        array(1) {
          [0]=>
          string(8) "Druapl_1"
        }
        ["first_name"]=>
        string(6) "Name_1"
        ["last_name"]=>
        string(10) "Lst_Name_1"
        ["skills"]=>
        array(3) {
          [0]=>
          string(6) "html_1"
          [1]=>
          string(5) "css_1"
          [2]=>
          string(8) "jQuery_1"
        }
      }
      [1]=>
      array(5) {
        ["_id"]=>
        object(MongoId)#14 (1) {
          ["$id"]=>
          string(24) "4ef81a0dcf163c7da3e5c964"
        }
        ["cms"]=>
        array(1) {
          [0]=>
          string(8) "Druapl_2"
        }
        ["first_name"]=>
        string(6) "Name_2"
        ["last_name"]=>
        string(10) "Lst_Name_2"
        ["skills"]=>
        array(3) {
          [0]=>
          string(6) "html_2"
          [1]=>
          string(5) "css_2"
          [2]=>
          string(8) "jQuery_2"
        }
      }
    }

現在は機能していますが、何らかの理由でビューに最初のアイテムしか表示されません。

4ef81a0dcf163c7da3e5c964

Name_2

Lst_Name_2

html_2

css_2

jQuery_2

Druapl_2

私の古い宿敵である foreach ループで何かがひどく間違っていると思います... 助けてください。ありがとうございました。

4

3 に答える 3

2

これを試して:

foreach($results as $row => $val)
{
    $data[$row] = $val;
}

最初に配列に変換する代わりに、完全なオブジェクトをテンプレートに渡すこともできます。

于 2011-12-28T08:18:23.620 に答える
1

私は FuelPHP に精通していませんが、 $data 変数が正しくフォーマットされていないようです。あなたが持っている:

foreach($results as $row => $val){
    $data = $val;
}

ほとんどの場合、次のようにする必要があります (新しい行を取得するたびに値を上書きしていました):

foreach($results as $row => $val){
    $data['results'][$row] = $val;
}

次に、ビューに次のようなものがあるはずです(結果を繰り返し処理していませんでした):

<body>
<div class="middle">
<?php foreach($results as $result): ?>
    <p><?php if (isset($result['_id'])){echo $result['_id'];} ?></p>
    <p><?php if (isset($result['first_name'])){echo $result['first_name'];} ?></p>
    <p><?php if (isset($result['last_name'])){echo $result['last_name'];} ?></p>
<?php endforeach; ?>
</div>
</body>

ただし、データを 2 回反復処理するという点で、これは非常に複雑です。あなたのより良いアプローチは、おそらく次のようになります。

//Replace this:
foreach($results as $row => $val){
    $data['results'][$row] = $val;
}

//with this:
$data['results'] = $results;

次に、ビューで次の操作を行います。

<body>
<div class="middle">
<?php foreach($results as $result): ?>
    <p><?php if (isset($result['_id'])){echo $result['_id'];} ?></p>
    <p><?php if (isset($result['first_name'])){echo $result['first_name'];} ?></p>
    <p><?php if (isset($result['last_name'])){echo $result['last_name'];} ?></p>
<?php endforeach; ?>
</div>
</body>

編集:

この回答が基づいている追加情報: (FuelPHP が CodeIgniter のように見えると仮定すると)

$data['some_item'] = some_val;
$data['some_item2'] = some_val2;

ビューに渡されると、次のようになります。

$some_item (some_val に相当) および $some_item2 (some_val2 に相当)

于 2012-01-03T21:48:06.560 に答える
1

私はphpを知りませんが、結果オブジェクトのすべてのキーと値のペアを繰り返し処理しているようです:

foreach($results as $row => $val)
{
    $data = $val;
}

なぜ言わないのか

foreach($results as $obj)
{
    $data = $obj
}

次に、ビュー内のデータ オブジェクトから必要なものを取得します。

<?php if (isset($data['_id'])){echo $data['_id'];} ?>

繰り返しますが、それがphpでどのように行うかはわかりませんが、属性を反復するのではなく、結果をループしてから各オブジェクトの属性にアクセスしたいという考えです。

更新: コードの一部を修正しました。

-タイラー

于 2011-12-27T21:24:32.250 に答える