2017-01-09 6 views
0

Для настройки небольшого домашнего фрейма я хочу отправить переменные в представление, но на сегодняшний день я не нашел никаких решений, которые работают.Функция для отправки переменной контроллера для просмотра

Код в вопросе:

SRC/Controller/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; 
    } 
} 
?> 

приложение/Controller/PostsController.php

<?php 
namespace App\Controller; 

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

Использование $this->set функции в PostsController возвращает меня Неопределенная переменная: сообщения после эха.

Я также пытаюсь установить ob_start и ob_get_clean в функцию набора, но не работает.

А именно, я не хочу включать набор функций в рендеринг, поскольку я обрабатываю представление вида динамически (см. __construct()).

Другой вопрос:

Как я связать Посмотреть класс с моими взглядами и таким образом использовать $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

Спасибо, это работает, но, как Я заявил в своем первом сообщении, что хотел бы избежать вызова представления, передав переменную. Идеальным было бы, чтобы получить функцию, которую вы сделали меня, и заменить вид с нулевым, например: визуализации (NULL, [ 'Param1' => 'value1', ' Param2' => «значение2 ]; > Я стараюсь, но это не работает, идея борьбы с этой небольшой проблемой Спасибо – Darkh

+0

EDIT: Я только что удалось изменить функцию, чтобы показать, что переменные? , переменные отображаются хорошо, но все же задают мне неопределенную переменную ... Посмотрите код: https://code.empreintesduweb.com/11288.html – Darkh