Как настроить контроллеры CodeIgniter для похожих форм в разных каталогах - PullRequest
0 голосов
/ 22 ноября 2018

Я использую CodeIgniter для доступа к различным типам форм.

У меня есть такой каталог:

-views
--resources
---app1
----form.php
---app2
----form.php
---app3
----form.php
---app4
----form.php

Мой класс в настоящее время очень простой, но этот

class Resources extends CI_Controller {

        public function app1($page = '')
        {
                $data['title'] = ucfirst($folder); // Capitalize the first letter

                $this->load->view('templates/header', $data);
                $this->load->view('resources/app1/form.php', $data);
                $this->load->view('templates/footer', $data);


        }

        public function app2($page = '')
        {
                $data['title'] = ucfirst($folder); // Capitalize the first letter

                $this->load->view('templates/header', $data);
                $this->load->view('resources/app2/form.php', $data);
                $this->load->view('templates/footer', $data);


        }

}

Это кажется очень многословным и ненужным иметь метод для каждой формы.Однако я не могу найти, как я могу изменить каталог без создания нового метода.В идеале я хотел бы метод, где я могу передать в новый каталог, как аргумент, как $ page.Например:

class Resources extends CI_Controller {

        public function view($page = '')
        {
                $data['title'] = ucfirst($folder); // Capitalize the first letter

                $this->load->view('templates/header', $data);
                $this->load->view('resources/'. $folder. '/form.php', $data);
                $this->load->view('templates/footer', $data);


        }

}

Однако кажется, что CodeIgniter не позволяет этого.Кто-нибудь может предложить способ, которым это может работать?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

На самом деле вы можете.

Создайте base_controller внутри вашей папки core и назовите ее MY_Controller.php, сделайте так, чтобы она расширялась CI_Controller, и создали метод внутри MY_Controller и назовите его render, render_view, view все, что вы хотите, и внутри этой функции загрузите свои макеты и шаблон и просто передайте ему представление: application/core/MY_Controller.php

class MY_Controller extends CI_Controller {

    protected $data = array();

    public function render_view($view = '')
    {
            $this->load->view('templates/header', $this->data);
            $this->load->view('view_path/'. $view, $this->data);
            $this->load->view('templates/footer', $this->data);
    }
}

и для каждого контроллера в вашем приложении сделайте расширение MY_Controller и всякий раз, когда выхочу визуализировать представление, используя render_view($view), и вы предварительно загрузили header и footer, и это самый простой способ сделать его СУХИМЫМ.

Наконец, в вашем контроллере это должно выглядеть так:

class Resources extends CI_Controller {

    public function app1($page = '')
    {
            // $data array in my_controller, it will automatically be passed inside render_view
            $this->data['title'] = ucfirst($folder); // Capitalize the first letter
            $this->render_view('app1/form');
    }

    public function app2($page = '')
    {
            $this->data['title'] = ucfirst($folder); // Capitalize the first letter
            $this->render_view('app2/form');
    }

} ​​

0 голосов
/ 22 ноября 2018

Вызывать вашу функцию "view" почти наверняка плохая идея ... она используется CI для $ this-> load-> view () для начинающих.

    public function app_form($page = '')
    {
        $data['title'] = ucfirst($folder); // Capitalize the first letter

        $this->load->view('templates/header', $data);
        $this->load->view('resources/'. $page. '/form.php', $data);
        $this->load->view('templates/footer', $data);

    }

Это должно работать, нокак вы собираетесь вызывать функции?Через файл route.php?

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