2017-01-09 5 views
0

小さなホームフレームワークを設定するには、ビューに変数を送信する必要があります。ビューにコントローラ変数を送信する関数

問題のコード:

のsrc /コントローラ/ Controller.php

<?php 

namespace App\Controller; 
use App\Network\Request; 

class Controller { 
    protected $viewPath = ROOT . VIEW; 
    protected $template = ROOT . TEMPLATE; 
    protected $layout = "default"; 


    public function __construct() 
    { 
     $request = new Request(); 
     $this->render($request->controller().'/'. $request->action()); 
    } 

    public function layout($template) { 
     if($template != $this->layout) { 
      require $this->template . $template . '.php'; 
     } 
    } 

    public function render($view) { 

     ob_start(); 
     require $this->viewPath . '/' . str_replace('.', '/', $view). '.php'; 
     $content = ob_get_clean(); 
     require $this->template .$this->layout . '.php'; 
    } 

    public function set($varname) { 
     extract($varname); 
     return $varname; 
    } 
} 
?> 

アプリ/コントローラ/ PostsController.php

$this->set機能を使用して
<?php 
namespace App\Controller; 

class PostsController extends Controller { 
    public function index() { 
     $posts = [ 
      "id" => "1", 
      "ids" => "2" 
     ]; 
     $this->set(compact('posts')); 
    } 
} 
?> 

PostsControllerが私に返す未定義の変数:エコー後の投稿。

また、ob_startob_get_cleanをセット機能に入れようとしますが、どちらも機能しません。

つまり、ビューのビューを動的に処理するため、レンダリングに関数セットを含めたくありません(__construct()参照)。

別の質問:私は私の意見でViewクラスを関連付けるため、$this->method()を使用するにはどうすればよい

答えて

0

あなたの変数のみsetスコープを機能するように制限されています、ありがとうございました。ですから、あなたがその

public function render($view, array $params = []){ 
    extract($params, EXTR_OVERWRITE); 
    ob_start(); 
    require $this->viewPath . '/' . str_replace('.', '/', $view). '.php'; 
    $content = ob_get_clean(); 
    require $this->template .$this->layout . '.php'; 
} 

ようにレンダリング関数に値の配列を送信しませんなぜそれが関数 をレンダリング見ることができない、あなたは、この

$this->render('hello', [ 
    'name' => 'Mikołaj', 
    'surname' => 'Woźniak' 
]); 
+0

のようにそれを呼び出すことがとしてではなく作品、ありがとう私は最初の投稿で述べましたが、変数を送信してビューを呼び出さないようにしたいと思います。 理想的には、あなたが私を行っている機能を取得し、ヌル、一例でビューを置き換えるために、次のようになります。<?phpの ます$ this-> (ヌル、[ 「Param1の」=>「VALUE1」、 をレンダリング " ??PARAM2' =>「value2の ]; > この小さな問題に対処するためのアイデア、私がしようとしたが、それは動作しません はあなたに – Darkh

+0

EDITありがとう:私は変数ことを示すために機能を変更するだけで管理しています変数はうまく表示されますが、まだ未定義の変数が表示されます... コードを参照してください:https://code.empreintesduweb.com/11288.html – Darkh

関連する問題