2012-04-08 5 views
0

Mein Controller verwaltet alle Funktionen einer internen Gruppe innerhalb der größeren Gemeinschaft des CMS. Ich möchte admin die Fähigkeit anbieten, das Verb zu ändern, das auf diese Gruppe verweist. Beispiele für solche könnten sein: team, wing, platoon oder sogar dogfood, wenn es ihnen genügt.CodeIgniter: Constants.php Konstante aus DB

Das Problem, das ich erfahre, ist, das Routing aus einer Datenbankzeichenfolge zu ziehen, damit site.com/squad der Wert wird, den der Administrator festlegt. Jedoch. Man kann dies nicht ohne a) Hacken des Kerns oder b) Erweitern des CI_Router tun.

Ich habe die Erweiterung begonnen, bekam aber nur so weit:

class MY_Router extends CI_Router { 
    function MY_Router() 
    { 
     $this->config =& get_config(); 
     parent::__construct(); 
    } 
} 

All Ich mag würde zu tun ist:

define('UNIT', $this->get_setting('squad-term')); 
$route[UNIT] = "squad"; 

Hat jemand eine Annäherung an das?

Antwort

1

Freund von mir gefunden this article und die Lösung funktioniert perfekt. Zugegeben, es dauert eine weitere db Anfrage, aber das ist der Preis zu zahlen.

config/routes.php

require_once(BASEPATH .'database/DB'. EXT); 
$db =& DB(); 
$query = $db->where('setting_slug', 'squad-term')->get('_settings'); 
$result = $query->result(); 
$term = lcfirst($result[0]->setting_value); 

$route[$term] = "squad"; 
$route[$term . 's'] = "squads"; 
+0

funktioniert nicht in ci 3.0 –

1

Die Art, wie ich in der Regel tun dies eine Zeichenfolge vorangestellt ist (zB: squad_) auf das Segment, das können Sie dann in routes.php

site.com/squad_team 
site.com/squad_squad 
site.com/squad_dogfood 

Oder ein bisschen sauberer, fügen Sie ein weiteres mit einem Regex ' Ebene‘, die Sie dann über $route['s/(:any)']

site.com/s/team 
site.com/s/squad 
site.com/s/food 

Having said in routes.php übereinstimmen, dass, ich bin nicht sicher, warum Sie

muss den Namen des Squad-Controllers neu schreiben

?

+0

dies tun erfordert immer noch die Routensuche dynamisch. Erlaube mir, klarer zu sein. Die Funktionalität für Gruppenaktionen (Benutzer verwalten, Community Walls, Nachrichten, News, etc.) wird vom Controller 'squad' behandelt. Da nicht jeder Installationsadministrator die Divisionen seiner Community 'Squads' aufrufen möchte, habe ich eine Methode eingerichtet, um das Verb zu ändern, dh zu 'team'. Es ist ziemlich albern, einen Controller zu haben, der die Verwaltung Ihrer "Teams" übernimmt, um "Squad" genannt zu werden, finden Sie nicht? Daher möchte ich den Controller aufgrund des in der Datenbank zugewiesenen Verbs bedingt weiterleiten. – codezyne

Verwandte Themen