Страница 404 не найдена для codeigniter MVC при настройке front_end - PullRequest
0 голосов
/ 08 мая 2020

Я искал это, но не нашел полезного решения, поэтому отправляю свой вопрос здесь. Я использую codeigniter MVC для своего проекта. У меня есть административная панель и бэкэнд, но я получаю сообщение об ошибке «404 страница не найдена», когда я пытался настроить интерфейс в codeigniter MVC.

Структура моего приложения:

project_name
--application
  controllers
    -- admin
    -- front_end
       -- Front_end.php
  models
    -- admin
    -- front_end
       -- Mdl_front_end.php
  views
    -- admin
    -- front_end
      -- home.php

маршруты. php

  $route['default_controller'] = 'front_end/front_end/index';
  $route['404_override'] = '';
  $route['translate_uri_dashes'] = TRUE;
  $route['admin'] = 'admin/login';
  $route['admin/gallery'] = 'admin/gallery/add';
  $route['about'] = 'front_end/about';

core / MY_Controller. php

<?php (defined('BASEPATH')) OR exit('No direct script access allowed');
   class MY_Controller extends CI_Controller {
   function __construct()
   {
     parent::__construct();
   }
 }
?>

application / controllers / front_end / Front_end. php

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Front_end extends MY_Controller {

  public function __construct(){
     parent::__construct();
  }
  public function index(){
    $this->load->view('front_end/home');
  }
}

всякий раз, когда я обращаюсь к URL-адресу root, например: http://localhost/prject_name/ и получаю сообщение об ошибке «Страница 404 не найдена» . Кто-нибудь, пожалуйста, укажите мне правильное направление? Спасибо.

Ответы [ 2 ]

0 голосов
/ 09 мая 2020

ci3 разработан таким образом
вы не можете установить контроллер по умолчанию вложенным образом ..

, но если вы все же хотите это сделать. вы можете сделать это так

set $route['default_controller'] = 'home';

home. php должно быть в root пути контроллера /controller/home.php и включить ваш контроллер здесь

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

//requiring home controller
require_once APPPATH."controllers/front_end/Front_end.php";
0 голосов
/ 08 мая 2020

Tow ответов на эту проблему.

  1. Для работы с настройками CodeIgniter по умолчанию для маршрутов с использованием только контроллеров, которые находятся в папке контроллеров напрямую $route['default_controller'] = 'controllerName', при использовании этой опции нет способ работы с подпапками, например controllers / subfolder / yourcontroller. php. Невозможно сделать что-то подобное $route['default_controller'] = 'subfolder/yourcontroller';. К счастью, мы можем управлять CodeIgniter, создавая новый маршрут для каждой подпапки в папке контроллеров, чтобы указать контроллер по умолчанию для этого пути. Давайте посмотрим на это в вашем проекте, у вас есть controllers/front_end/front_end.php, поэтому вам нужно go application/config/routes.php и добавить следующую строку:

    $ route ['front_end'] = 'front_end / front_end';

Затем откройте браузер и напишите http://localhost/projectname/front_end, это эквивалентно http://localhost/projectname/front_end/front_end/index.

Переопределив класс маршрутизатора CodeIgniter вашим собственным классом, для этого добавьте файл my_router. php по пути application/core, внутри этого файла скопируйте и вставьте следующий код:

class MY_Router extends CI_Router {

protected function _set_default_controller() {

    if (empty($this->default_controller)) {

        show_error('Unable to determine what should be displayed. A default route has not been specified in the routing file.');
    }

    // Is the method being specified?
    if (sscanf($this->default_controller, '%[^/]/%s', $class, $method) !== 2) {
        $method = 'index';
    }

    // This is what I added, checks if the class is a directory

    if( is_dir(APPPATH.'controllers/'.$class) ) {

        // Set the class as the directory

        $this->set_directory($class);

        // $method is the class

        $class = $method;

        // Re check for slash if method has been set

        if (sscanf($method, '%[^/]/%s', $class, $method) !== 2) {
            $method = 'index';
        }
    }


    if ( ! file_exists(APPPATH.'controllers/'.$this->directory.ucfirst($class).'.php')) {

        // This will trigger 404 later

        return;
    }

    $this->set_class($class);
    $this->set_method($method);

    // Assign routed segments, index starting from 1

    $this->uri->rsegments = array(
        1 => $class,
        2 => $method
    );

    log_message('debug', 'No URI present. Default controller set.');
}
}

После завершения этого go в ваше приложение / config / routes. php и настройте контроллер по умолчанию:

   $route['default_controller'] = 'front_end/fornt_end';

Затем в браузере просто введите: http://localhost/projectname, и вы получите то, что хотите.

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