最近、アプリケーションに MVC 構造を実装する方法を学んでいます。近い将来、PHP フレームワークを使用する予定ですが、今のところ純粋な PHP です。コントローラーは「スキニー」で、モデルは「ファット」であるべきだと学びましたが、これがきれいな URL とどのように連携するのか理解できないようです。
インターンシップを行っている会社で、データベース内の 3 つの異なるテーブルに対して CRUD アクションを実行する Web ベースのアプリケーションを開発しています。各テーブルには固有のフィールドがあります。つまり、これらのテーブルごとに 4 つのビューが必要です (CRUD アクションごとに 1 つ)。
私はクリーンな URL を利用したいので、現在、URL をセグメントに分割して分析し、各セグメントの特定のメソッドとビューを呼び出す 1 つ (1 つだけ) のコントローラー (index.php) を持っています。 ) ユーザーを正しい URL にリダイレクトします。
現在、コントローラーには 1000 行近くのコードが含まれています。私はいつも、コントローラーは「スキニー」であるべきだと読んでいて、1 つのアプリケーションで複数のコントローラーについて話している人を見てきました。これをきれいな URL と組み合わせて実装する方法を理解できないようです...
どんな助けでも大歓迎です。私がインターンシップをしている会社では、Webデザイナーしかいないので、彼にプログラミングに関する質問をすることはできません...
以下は、私のコントローラー (index.php) の基本的な表現です。
// Check if user is logged in
if (isset($_SESSION['username']) AND isset($_SESSION['loggedIn'])) {
// Get URL from $_SERVER
$url = $_SERVER['REQUEST_URI'];
// Split URL and assign values to $url
$url = trim($url, "/");
$url = explode('/', $url);
// Remove first url segment (index.php) for convenience
array_shift($url);
// Check if 1st URL segment (category) is set
if (isset($url[1])) {
$category = $url[1];
// Check if category is 'apples'
if ($category == 'apples') {
// Check if 2nd URL segment (action) is set
if (isset($url[2])) {
$action = $url[2];
// Check if action is 'add'
if ($action == 'add') {
// Calls to Model
// Include Presentation (form to add new record to 'apples' category)
}
// Check if action is 'view'
elseif ($action == 'view') {
// Calls to Model
// Include Presentation (list of all records in the 'apples' table)
}
// Check if action is 'edit'
elseif ($action == 'edit') {
// Check if 3d URL segment (id) is set
if (isset($url[3])) {
$id = $url[3];
// Calls to Model
// Include Presentation (form to edit record of the 'apples' category);
}
// If 3d URL segment (id) is not set then redirect
else {
header('Location: index.php/$category/view');
}
}
// Check if action is 'delete'
elseif ($action == 'delete') {
// Check if 3d URL segment (id) is set
if (isset($url[3])) {
$id = $url[3];
// Calls to Model
// Include Presentation (form to edit record of the 'apples' category);
}
// If 3d URL segment (id) is not set then redirect
else {
header('Location: index.php/$category/view');
}
}
// If 2nd URL segment (action) is invalid then assume user wants to view and redirect
else {
header("Location: index.php/$category/view");
}
}
// If 2nd URL segment (category) is not set then assume user wants to view and redirect
else {
header("Location: index.php/$category/view");
}
}
// Check if category is 'pineapples'
elseif ($category == 'pineapples') {
// same here as in 'apples' code block
}
// Check if category is 'pears'
elseif ($category == 'pears') {
// same here as in 'apples' code block
}
// If 1st URL segment (category) is invalid then redirect to index.php
else {
header('Location: index.php')
}
}
// If 1st URL segment (category) is not set then show category overview
else {
include 'presentation/category_overview.php';
}
}
// If user is not logged in then check if login form got submitted
elseif($_POST['formSubmit'] == 'submit') {
// Calls to Model (form and user credentials validation)
// Include Presentation (category overview)
}
// If user is not logged in and did not submit login form then include view (login form)
else {
include 'presentation/login.php';
}