Перенаправить / nameoftheorganization на / home / nameoftheorganization, которая вызывает Home. php контроллер - PullRequest
2 голосов
/ 04 апреля 2020

Я использую php codeigniter для проекта, в котором есть несколько организаций. У каждой организации будет свой собственный веб-сайт, мне нужно перенаправить каждого пользователя на веб-сайт своей организации в соответствии с названием организации.

Я получил это частично в рабочем состоянии. Используя localhost в качестве примера:

localhost / application / -> Переход к правильному представлению;

localhost / home / nameoftheorganization -> Переход к правильному представлению организации;

Но Есть ли способ устранить «Домашний» контроллер?

Мои маршруты. php выглядит так:

$route['default_controller'] = 'home';
$route['404_override'] = 'home/page_not_found';
$route['translate_uri_dashes'] = FALSE; 

Мой дом. php контроллер выглядит так:

public function __construct()
{
    parent::__construct();
    // Your own constructor code
    $this->load->database();
    $this->load->library('session');
    // $this->load->library('stripe');
    /*cache control*/
    $this->output->set_header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
    $this->output->set_header('Pragma: no-cache');
    if (!$this->session->userdata('cart_items')) {
        $this->session->set_userdata('cart_items', array());
    }
}

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

public function home($domain = '') {
    if($domain != ''){
        $frontend = $this->crud_model->get_frontend_information($domain);
    }else{
       $frontend = $this->crud_model->get_frontend_information('myapp'); 
    }

    foreach($frontend AS $arr){
        if(is_array($arr)){
            $website[$arr['key']] = $arr['value'];
            }
        }

    $this->session->set_userdata('website', $website);


    $page_data['page_name'] = "home";
    $page_data['page_title'] = get_phrase('home');
    $this->load->view('frontend/'.get_frontend_settings('theme').'/index', $page_data);
}

htaccess выглядит так

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?/$1 [L]

1 Ответ

2 голосов
/ 04 апреля 2020

Но есть ли способ исключить контроллер "Home"?

, в вашем примере это может быть достигнуто по следующему маршруту:

$route['(:any)'] = 'home/home/$1';

это подаст вашу home() функцию контроллера Home. php.

выше того маршрута, который вы, возможно, захотите добавить маршруты, чтобы добраться до любой другой функции в этом доме. php контроллер

не забывайте о трех зарезервированных маршрутах в основном:

$route['default_controller'] = 'yourdefaultcontroller';

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

$route['default_controller'] = 'home';
$route['about']='home/about';
$route['contact']='home/contact';
$route['(:any)'] = 'home/home/$1';
$route['404_override'] = 'sitemanager/my_404';
$route['translate_uri_dashes'] = FALSE;

теперь вы можете ввести www.yoursite.com/organization1, который будет отправлен контроллеру Home.php с примечанием $id='organization1'

: вам нужно будет отфильтровать запросы, которые не относятся к вашей базе данных организаций в вашей функции home (), и отправить их на вашу пользовательскую страницу 404.

подробнее о Codeigniter Routing

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