Codeigniter Dynamic Routing из базы данных - PullRequest
0 голосов
/ 24 марта 2019

Я реализовал систему динамической маршрутизации для моего Codeigniter из базы данных. в то время как я загружаю маршруты динамически, это показывает мне внутреннюю ошибку сервера 500. Я уже реализовал в других моих проектах также, но это не возможно здесь. Я использую Codeigniter https://github.com/chriskacerguis/codeigniter-restserver

// $route['default_controller'] = 'Home';
// $route['person/(:any)'] = 'Home/person_data/$1';
// $route['filmography/(:any)'] = 'Home/filmo_details/$1';
// $route['biography/(:any)'] = 'Home/bio_details/$1';
// $route['article/(:any)'] = 'Home/article_details/$1';
// $route['jukebox/(:any)'] = 'Home/jukebox/_details/$1';
// $route['admin'] = 'Admin';
// $route['login'] = 'Admin/login';
// $route['404_override'] = '';
// $route['translate_uri_dashes'] = TRUE;

$route[ 'default_controller' ]  = 'Home';
$route['admin'] = 'Admin';
$route['login'] = 'Admin/login';
$route[ '404_override' ]        = 'my404';

require_once(BASEPATH .'database/DB'. EXT);
$db =& DB();
$query = $db->get( '_app_routes' );
$result = $query->result();
// echo"<pre>";print_r($result);exit;
foreach( $result as $row )
{
    $route[ $row->slug ]                 = $row->controller;
    $route[ $row->slug.'/:any' ]         = $row->controller;
    $route[ $row->controller ]           = $row->controller;
    $route[ $row->controller.'/:any' ]   = $row->controller;
}
$route['translate_uri_dashes'] = TRUE;



/*
| -------------------------------------------------------------------------
| Sample REST API Routes
| -------------------------------------------------------------------------
*/
$route['api/example/users/(:num)'] = 'api/example/users/id/$1'; // Example 4
$route['api/example/users/(:num)(\.)([a-zA-Z0-9_-]+)(.*)'] = 'api/example/users/id/$1/format/$3$4'; // Example 8

Контроллер

public function person_details($personid){
        $data = array();
        $data['persondata']=$this->User_model->getPersondata($personid);
        // echo"<pre>";print_r($data);exit;
        $this->load->view('default/person_details_view',$data);
    }

Сгенерированные маршруты

Array
(
    [0] => stdClass Object
        (
            [ID] => 1
            [slug] => pawan-kalyan
            [controller] => Home/person_details/1
            [PAGE_ID] => 1
            [PAGE_GROUP_ID] => 1
            [STATUS] => 1001
        )

    [1] => stdClass Object
        (
            [ID] => 2
            [slug] => chiranjeevi
            [controller] => Home/person_details/2
            [PAGE_ID] => 2
            [PAGE_GROUP_ID] => 1
            [STATUS] => 1001
        )

    [2] => stdClass Object
        (
            [ID] => 3
            [slug] => nagababu
            [controller] => Home/person_details/3
            [PAGE_ID] => 3
            [PAGE_GROUP_ID] => 1
            [STATUS] => 1001
        )

    [3] => stdClass Object
        (
            [ID] => 4
            [slug] => allu-arjun
            [controller] => Home/person_details/4
            [PAGE_ID] => 4
            [PAGE_GROUP_ID] => 1
            [STATUS] => 1001
        )

    [4] => stdClass Object
        (
            [ID] => 5
            [slug] => ram-charan-tej
            [controller] => Home/person_details/5
            [PAGE_ID] => 5
            [PAGE_GROUP_ID] => 1
            [STATUS] => 1001
        )

    [5] => stdClass Object
        (
            [ID] => 6
            [slug] => sai-dharam-tej
            [controller] => Home/person_details/6
            [PAGE_ID] => 6
            [PAGE_GROUP_ID] => 1
            [STATUS] => 1001
        )

    [6] => stdClass Object
        (
            [ID] => 7
            [slug] => varun-tej
            [controller] => Home/person_details/7
            [PAGE_ID] => 7
            [PAGE_GROUP_ID] => 1
            [STATUS] => 1001
        )

    [7] => stdClass Object
        (
            [ID] => 8
            [slug] => naga-babu-says-i-don't-know-balakrishna
            [controller] => Home/article_details/1
            [PAGE_ID] => 8
            [PAGE_GROUP_ID] => 1
            [STATUS] => 1001
        )

)

1 Ответ

1 голос
/ 24 марта 2019

Вы пропустили скобку для матча regexp.то есть :any должно быть похоже на (:any).Обновите маршрут, как показано ниже, и попробуйте.

foreach( $result as $row )
{
    $route[ $row->slug ]                 = $row->controller;
    $route[ $row->slug.'/(:any)' ]         = $row->controller;
    $route[ $row->controller ]           = $row->controller;
    $route[ $row->controller.'/(:any)' ]   = $row->controller;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...