この問題を解決する方法について、いくつかのヒントをお願いしたいと思います。独自の MVC Web サイトを構築しようとしています。URLの基本を学びました。
http://example.com/blog/cosplay/cosplayer-expo-today
ブログ -> コントローラの
コスプレ -> コントローラのメソッド
cosplayer-expo-today -> メソッドの変数
ブログ コントローラーでカテゴリを動的に拡張するとどうなりますか? メソッドを作成する必要がありますか、またはそれを自動的に行うためのトリックはありますか? つまり... 私は今これらのカテゴリを持っています: コスプレ、ゲーム、映画、シリーズ. したがって、コントローラーでこれらのメソッドを作成する必要がありますが、それらはすべて同じことを行います。つまり、データベースから他のカテゴリを選択します。
- 関数 cosplay() = example.com/blog/cosplay/
- 関数 game() = example.com/blog/game/
- 関数 movie() = example.com/blog/movie/
- 関数 series() = example.com/blog/series/
それを自動的に行うようにコントローラーを作成する方法について何か良いアドバイスはありますか? データベースに新しいカテゴリをアップロードしたとしても、コントローラーを変更したくありません。出来ますか?助けてくれてありがとう!
アップデート
これが私のURLエクスプローダークラスです
class Autoload
{
var $url;
var $controller;
function __construct()
{
$this->url = $_GET['url'];
//HNEM ÜRES AZ URL
if($this->url!='' && !empty($this->url))
{
require 'application/config/routes.php';
//URL VIZSGÁLATA
$this->rewrite_url($this->url);
//URL SZÉTBONTÁSA
$this->url = explode('/', $this->url);
$file = 'application/controllers/'.$this->url[0].'.php';
//LÉTEZIK A CONTROLLER?
if(file_exists($file))
{
require $file;
$this->controller = new $this->url[0];
//KÉRELEM ALATT VAN AZ ALOLDAL?
if(isset($this->url[1]))
{
//LÉTEZIK A METÓDUS? ENGEDÉLYEZVE VAN?
if(method_exists($this->controller, $this->url[1]) && in_array($this->url[1], $route[$this->url[0]]))
{
if(isset($this->url[2]))
{
$this->controller->{$this->url[1]}($this->url[2]);
}
else
{
$this->controller->{$this->url[1]}();
}
}
else
{
header('location:'.SITE.$this->url[0]);
die();
}
}
}
else
{
header('location:'.SITE);
die();
}
}
else
{
header('location:'.SITE.'blog');
die();
}
}
/**
* Első lépésben megvizsgáljuk, hogy a kapott szöveg tartalmaz-e nagybetűt. Amennyiben igen átalakítjuk kisbetűsre.<br/>
* Második lépésben megnézzük, hogy a kapott szöveg '/'-re végződik-e. Amennyiben igen levágjuk azt.<br/>
* Harmadik lépésben újra töltjük az oldalt a formázott szöveggel.
*
* @param string $url Korábban beolvasott URL.
*/
private function rewrite_url($url)
{
//HA NAGYBETŰ VAN AZ URL-BEN VAGY '/'-RE VÉGZŐDIK
if(preg_match('/[A-Z]/', $url) || substr($url, -1)=='/')
{
//NAGYBETŰS AZ URL KICSIRE ALAKÍTJUK
if(preg_match('/[A-Z]/', $url))
{
$url = strtolower($url);
}
//HA '/'-RE VÉGZŐDIK LEVÁGJUK
if(substr($url, -1)=='/')
{
$url = substr($url, 0, strlen($url)-1);
}
header('location:'.SITE.$url);
die();
}
}
}
そして、ここに私の.htaccessがあります
Options +FollowSymLinks
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]