Есть проблема подключения модели в контроллерe.Я создал основной метод для подключения файлов моделеи который вызывается при необходимости.
Проблмa находится в методе actionServiceinfo()
в который подключается requireModel()
.Помогите с проблемой .Заранне спасибо
Вот Код
index.php
error_reporting(E_ALL);
ini_set("display_errors", 1);
require_once('Core/Bootstrap.php');
require_once('Core/Controller.php');
require_once('Core/Model.php');
require_once('Core/View.php');
require_once('Core/Database.php');
require_once('config/Database.php');
require_once('config/Secure.php');
$bootstrap = new Bootstrap();
Core/Bootstrap.php
private $controller = NULL;
private $action = NULL;
private $params = array();
private function parseUrl(){
if (isset($_GET['url'])) {
$url = Secure::secureUrl($_GET['url']);
return $url;
}else{
require_once('controller/HomeController.php');
$object = new HomeController;
$object->actionIndex();
return false;
}
}
public function __construct(){
$explode = explode('/', $this->parseUrl());
if (isset($explode[0])) {
if (file_exists("controller/".ucfirst($explode[0])."Controller.php")) {
$this->controller = ucfirst($explode[0])."Controller";
require_once("controller/".$this->controller.".php");
}else{
require_once('controller/ErrorController.php');
$object = new ErrorController();
$object->actionIndex();
return false;
}
}
$object = new $this->controller;
if (isset($explode[2])) {
if (method_exists($object, "action".ucfirst($explode[1]))) {
$this->action = "action".ucfirst($explode[1]);
$this->param = $explode[2];
call_user_func([$object,$this->action], $this->param);
}else{
require_once('controller/ErrorController.php');
$object = new ErrorController();
$object->actionIndex();
return false;
}
}else{
if (isset($explode[1])) {
if (method_exists($object, "action".ucfirst($explode[1]))) {
$this->action = "action".ucfirst($explode[1]);
call_user_func([$object,$this->action]);
}else{
require_once('controller/ErrorController.php');
$object = new ErrorController();
$object->actionIndex();
return false;
}
}else{
$object->actionIndex();
}
}
}
}
Core/Controller.php
class Controller{
public function __construct(){
$this->view = new View();
}
public function requireModel($name){
$pathe = "model/" . $name . "Model.php";
if (file_exists($pathe)) {
require_once($pathe);
$this->model = new $name."Model";
}
}
}
Core/Model.php
class Model{
public function __construct(){
$this->db = new Database();
}
}
Core/Database.php
class Database extends PDO {
public function __construct(){
parent::__construct(DB_TYPE . ":host=" . DB_HOST . ";dbname=" . DB_NAME,DB_USER, DB_PASS);
}
}
Controller/ServiceController.php
class ServiceController extends Controller{
public function __construct(){
parent::__construct();
}
public function actionIndex(){
$this->view->render('Service/index');
}
public function actionServiceinfo($id = NULL){
$this->requireModel('Service');
$serviceModel = new ServiceModel();
$serviceInfo = $serviceModel->userInfo($id);
$this->view->render('Service/info',$serviceInfo);
print_r($serviceInfo);
}
}
Model/ServiceModel.php
class ServieModel extends Model{
public function __construct(){
parent::__construct();
}
public function userInfo($id){
$studentPrepare = $this->db->prepare("SELECT * FROM `services` WHERE service_id = :service_id");
$studentPrepare->execute([':service_id' => $id]);
return $studentPrepare->fetch();
}
}
Контроллер - это ввод. Играет ту же роль, что и, например, клавиатура, мышка, сканер, микрофон или вебкамера. Контроллер, как устройство ввода, не должен ничего знать про место хранения или способ инициализации классов ваших моделей. Об этом знает абстракция уровнем выше, приложение.
Раз уж вы взялись за реализацию MVC, начните сразу с нормального централизованного загрузчика классов. Для этого в пыхе уже давно есть готовые функции автолоада. Часть устарела, смотрите сразу на свежие в пакете spl, - https://www.php.net/manual/ru/function.spl-autoload-register.php
Как именно хранить и загружать файлы - дело ваше, но сообществом приняты стандарты, среди которых есть и канонический автолоадер - https://www.php-fig.org/psr/psr-4/
Можете просто разобраться в описании стандарта и взять из него же уже готовый пример (ссылка в конце статьи).
Либо, если коротко ответить на ваш вопрос, - файл модели не грузится, потому что или нет файла или путь к нему указан неверно. Выведите отладку и посмотрите по какому именно пути вы ищите файл. Скорее всего там банальная проблема с путями.
P.S. require_once - не функция, а языковая конструкция, и скобки для аргумента не нужны, пишите просто require_once 'имя_файла.php';
, без скобок.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Собственно сабж: гугл добавил новый атрибут loading для автоматической ленивой загрузки изображенийКак можно выполнить код на любом языке,...
Возможно кому то встречались готовые решения(библиотеки) подобные этой https://githubcom/grcanosa/telegram-calendar-keyboard, написанные на php Буду очень благодарен...
У меня есть 2 многомерных массива, мне нужно вычислить расхождение между ними, я пробовал их сравнить функцией array_diff но выводит ошибку, как...