【问题标题】:Function to send controller variable to view将控制器变量发送到视图的函数
【发布时间】:2017-01-09 10:07:32
【问题描述】:

为了建立一个小型家庭框架,我想将变量发送到视图,但我必须迄今为止找不到有效的解决方案。

有问题的代码:

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;
    }
}
?>

app/Controller/PostsController.php

<?php
namespace App\Controller;

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

在 PostsController 中使用 $this-&gt;set 函数返回未定义变量:回显后的帖子。

我也尝试将ob_startob_get_clean 放在 set 函数中,但也不起作用。

也就是说,我不想在渲染中包含函数集,因为我动态处理视图的视图(请参阅__construct ())。

另一个问题:

如何将 View 类与我的视图相关联,从而使用 $this-&gt;method ()

谢谢

【问题讨论】:

    标签: php function variables frameworks set


    【解决方案1】:

    您的变量仅限于函数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'
    ]);
    

    【讨论】:

    • 谢谢,它可以工作,但正如我在第一篇文章中所说,我想避免通过传输变量来调用视图。理想的情况是检索您为我完成的功能,并将视图替换为 null,例如: render(null, [ 'Param1' => 'value1', 'Param2' => 'value2 ]; ?> 我尝试了,但它不起作用,有办法解决这个小问题吗?谢谢
    • 编辑:我刚刚设法修改函数显示变量,变量显示很好,但仍然给我一个未定义的变量...查看代码:code.empreintesduweb.com/11288.html
    猜你喜欢
    • 1970-01-01
    • 2012-07-11
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-12
    • 1970-01-01
    相关资源
    最近更新 更多