为了设置一个小型主页框架,我想将变量发送到视图,但我必须找到无效的解决方案。
有问题的代码:
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
<?php
namespace App\Controller;
class PostsController extends Controller {
public function index() {
$posts = [
"id" => "1",
"ids" => "2"
];
$this->set(compact('posts'));
}
}
?>
使用PostsController中的$this->set
函数返回未定义的变量:回显后的帖子。
我也尝试将ob_start
和ob_get_clean
置于集合函数中,但也不起作用。
即,我不想在渲染中包含函数集,因为我动态处理视图的视图(参见__construct ()
)。
另一个问题:
如何将View类与我的视图相关联,从而使用$this->method ()
。
谢谢
答案 0 :(得分: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'
]);