Примечание: неопределенное свойство: при создании новой модели с использованием пространства имен - PullRequest
0 голосов
/ 12 сентября 2018

Я новичок в PHP.У меня есть этот главный контроллер:

namespace App\Core;

class Controller
{
    /** @var View View The view object */
    public $View;
    public $templates;
    /**
     * Construct the (base) controller. This happens when a real controller is constructed, like in
    */
    public function __construct()
    {
    }

    public function loadModel() {

        $this->model = new \App\Front\Model\IndexModel(); //error line

    }
}

В IndexController у меня есть:

namespace App\Front\Controller;

use App\Front\Model\IndexModel;

class IndexController extends \App\Core\Controller {

    public function index(){
        $this->loadModel->test();
    }
}

В IndexModel у меня есть:

namespace App\Front\Model;

class IndexModel
{

    public function test(){

        echo 'test print';

    }
}

В действии я получаю эту ошибку:

Примечание: неопределенное свойство: App \ Front \ Controller \ IndexController :: $ loadModel в /Applications/xampp/htdocs/cmstest/application/Front/Controller/IndexController.php в строке 13

Я загружаю все классы, используя composer и метод PDR-4.

В чем проблема и как ее исправить?Спасибо

1 Ответ

0 голосов
/ 12 сентября 2018

Обратите внимание, что в вашем методе loadModel вы просто присваиваете новую модель this, но ничего не возвращаете ->, поэтому вы не можете использовать test() для нуля.

Чтобы исправить этоиспользуйте:

class IndexController extends \App\Core\Controller {
    public function index(){
        $this->loadModel();
        $this->model->test();
    }
}

Если вы настаиваете на выполнении index только одной функции, вы можете изменить свою loadModel функцию на:

public function loadModel() {
    if (!$this->model) // that way you load the Model only once. If you want to reload every time just remove the if
        $this->model = new \App\Front\Model\IndexModel();
    return $this->model;
}  

И затемВы можете сделать:

public function index(){
    $this->loadModel()->test();
}
...