Примечание: неопределенная переменная: веточка - PullRequest
0 голосов
/ 09 апреля 2019

я не знаю, как использовать в контроллерах композитора.

1 composer.json:

"require": {
        "php": ">=7.2.0",
        "filp/whoops": "*",
        "noahbuscher/macaw": "dev-master",
        "twig/twig": "^2.0"
    },
    "autoload": {
        "psr-4": {
            "App\\": "App/"
        },
        "files":[]
    }

2 контроллера:

Контроллеры | -HomeController.php | -ShareControllers.php

3 ShareControllers.php:

<?php


namespace  App\Controllers;


class ShareControllers
{
    public function __construct()
    {

        $loader = new \Twig\Loader\FilesystemLoader(VIEW_PATH);
        $twig = new \Twig\Environment($loader, [
            'cache' => CACHE_PATH,
            'debug' => true
        ]);

    }
}

4 HomeController.php:

namespace  App\Controllers;


class HomeController extends ShareControllers
{
    public function index(){
        echo $twig->render('content.html', ['name' => 'hi']);
    }

}

так:

Notice: Undefined variable: twig  :(

1 Ответ

3 голосов
/ 09 апреля 2019

Это проблема с областью видимости.В настоящее время вы просто храните экземпляр ветки в локальной переменной, которая доступна только в области действия этих методов.Вам нужно добавить его как свойство класса:

class ShareControllers
{
    protected $twig;

    public function __construct()
    {    
        $loader = new \Twig\Loader\FilesystemLoader(VIEW_PATH);

        // Adding $this-> will store it in the above defined property
        $this->twig = new \Twig\Environment($loader, [
            'cache' => CACHE_PATH,
            'debug' => true
        ]);
    }
}

Теперь в вашем дочернем классе вы можете получить к нему доступ, используя:

class HomeController extends ShareControllers
{
    public function index(){
        // Here we also use $this-> to fetch the instance
        echo $this->twig->render('content.html', ['name' => 'hi']);
    }

}

Я бы порекомендовал прочитать руководство о свойства класса и области видимости переменных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...