Есть ли вообще Dynami c Controller в PHP Codeigniter - PullRequest
0 голосов
/ 30 мая 2020

Я новичок в кодировании PHP, и мне нужно знать, есть ли вообще имя контроллера c (а не имя функции контроллера) в Codeigniter.

У меня около 5 контроллеров, таких как Sf_client. php, Sf_network. php, Sf_display. php et c ... и кодировка одинакова во всех этих 5 контроллерах, за исключением одного имени переменной, которое отличается.

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

    class Sf_client extends UTF_Controller
    {

        function __construct() {
            parent::__construct();
            $this->resource_subtype = "client";
        }

        public function list() {
            $data['page_title'] = 'Client list';
            $this->template->set_title('CTL - '.$data['page_title']);
            $this->template->build('resources/list',$data);
        }
    }
?>

Другие контроллеры аналогичны приведенным выше, за исключением $this->resource_subtype = "client", это будет похоже на «сеть», «дисплей» и т. Д. c ...

Теперь URL-адрес выглядит как http://localhost/Sf_client/, http://localhost/Sf_network/ et c ...

Есть ли способ иметь один файл контроллера и передавать имя переменной? Так что я могу удалить повторяющиеся файлы контроллеров.

У меня есть и другие контроллеры. Итак, мне нужно что-то вроде "sf" в URL-адресе.

Любая помощь будет принята с благодарностью. Спасибо.

1 Ответ

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

Создание динамического c controllers невозможно, потому что даже если вы назовете class динамически, вам все равно придется иметь файл с таким же именем. Вот как работает CI URL.

Однако вы могли бы настроить маршрутизацию таким образом, чтобы, когда вы нажимаете определенный URL, он соответствовал другому controller, тогда в этом controller вы могли проверьте URL и присвойте переменной соответствующее значение.

Я создал демонстрацию для вашей проблемы, и этот ↓ сработал для меня. Посмотрите, работает ли это и для вас.

маршруты. php

$route['default']    = 'Sf_client'; // say default is 'Sf_client' -- you can ignore it if you already have a default. We'll be creating only this controller.
$route['Sf_network'] = 'Sf_client'; // route requests to this controller
$route['Sf_display'] = 'Sf_client'; // ...

просмотр

<a href="<?PHP echo base_url(); ?>">Sf_client</a> <!-- OR base_url('Sf_client'); // if not default -->
<a href="<?PHP echo base_url('Sf_network'); ?>">Sf_network</a> <!-- will correspond to Sf_client but the URL won't change -->
<a href="<?PHP echo base_url('Sf_display'); ?>">Sf_display</a> <!-- ... -->

Sf_client. php (контроллер)

class Sf_client extends UTF_Controller{

    function __construct() {

        parent::__construct();

        $segment = $this->uri->segment(1); // get the first segment from the URL which is controller's name

        switch($segment){ // check the segment value

            case 'Sf_network': 
                $this->resource_subtype = 'network';
                break;

            case 'Sf_display': 
                $this->resource_subtype = 'display';
                break;

            // ignore if default ↓↓
            /* case 'Sf_client': 
                $this->resource_subtype = 'client';
                break; */

            default: 
                $this->resource_subtype = 'client';
        }
        echo $this->resource_subtype; // will return network if in http://localhost/Sf_network 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...