Ссылка на другую страницу не работает из-за проблем с маршрутизацией? - PullRequest
0 голосов
/ 20 февраля 2019

Когда я нажимаю на ссылку на моем index.php, которая идет на страницу users.php, я получаю те же данные, что и на index.php, и они должны отличаться.Мой маршрут ссылки на users.php хорош, и я думаю, что проблема в основном контроллере (Core.php), я просто не могу найти проблему.Также имя контроллера - UserController, и когда я изменяю имя users.php на usercontroller.php и изменяю href также на usercontroller, тогда он работает просто отлично.Вот мой код:

структура кода:

Project
 |    
 +-- App
 |   |  
 |   +-- Controllers
 |       |
 |       +-- PageController.php
 |       +-- UserController.php  
 |   +-- Libraries
 |       |
 |       +-- Core.php
 |       +-- Controller.php
 |   +-- Views
 |       |
 |       +-- pages
 |           |
 |           +-- users.php
 |           +-- index.php

index.php:

<?php require '../App/Views/includes/header.php' ; ?>
<h1>Homepage!!!</h1>
<a href="users">Users</a>
<?php require '../App/Views/includes/footer.php' ; ?>

PageController.php

<?php
namespace App\Controllers;

use App\Libraries\Controller;

class PageController extends Controller
{
    public function index()
    {
       $this->view('pages/index');
    }
}

UserController.php:

<?php
namespace App\Controllers;

use App\Libraries\Controller;

class UserController extends Controller
{
    public function index()
    {
       $this->view('pages/users');
    }
}

Controller.php:

<?php
namespace App\Libraries;

class Controller
{
    public function model($model)
    {
       require_once '../App/Models/' . $model . '.php';
       return new $model();
    }

    public function view($view, $data = [])
    {
       if (file_exists('../App/Views/' . $view . '.php')) {
        require_once '../App/Views/' . $view . '.php';
       } else {
         die("View does not exist!!!");
       }
    }
 }

Core.php

<?php
namespace App\Libraries;

class Core
{
   protected $currentController = 'App\Controllers\PageController';
   protected $currentMethod = 'index';
   protected $params = [];

   public function __construct()
   {
       $url = $this->getUrl();
       if (file_exists('../App/Controllers/' . ucwords($url[0]). '.php')) {
        $this->currentController = ucwords($url[0]);
          if (isset($url[0])) {
            $this->currentController = '\App\Controllers\\' . ucwords($url[0]);
        }
          unset($url[0]);
        }
          $this->currentController = new $this->currentController;

       if (isset($url[1])) {
         if (method_exists($this->currentController, $url[1])) {
            $this->currentMethod = $url[1];
            unset($url[1]);
          }
        }
          $this->params = $url ? array_values($url) : [];
          call_user_func_array([$this->currentController, $this->currentMethod], $this->params);
   }

public function getUrl()
{
    if (isset($_GET['url'])) {
        $url = rtrim($_GET['url'], '/');
        $url = filter_var($url, FILTER_SANITIZE_URL);
        $url = explode('/', $url);
        return $url;
       }
    }
 }

1 Ответ

0 голосов
/ 20 февраля 2019

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

   public function __construct()
   {
       $url = $this->getUrl();
       if (file_exists('../App/Controllers/' . ucwords($url[0]). 'Controller.php')) {
        $this->currentController = ucwords($url[0]);
          if (isset($url[0])) {
            $this->currentController = '\App\Controllers\\' . ucwords($url[0]).'Controller';
        ...
    }

И теперь, если у вас есть URL, например / users, вы должны назвать свой контроллеркак UsersController

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