Rumah pembangunan bahagian belakang tutorial php 理解PHP中的MVC编程之控制器_PHP

理解PHP中的MVC编程之控制器_PHP

Jun 01, 2016 pm 12:29 PM
class module pengawal faham pengaturcaraan

MVC

简单来讲,控制器的作用就是接受请求。它使用获取的方法,在这里是通过URI,载入一个功能模块来刷新或者提交一个表述层。控制器将使用$_GET自动全局变量来判断载入哪一个模块。

  一个请求的例子,看起来像这样:

  http://example.com/index.php?module=login

  这看起来很简单,但是在实现的过程中却不是。这里是几个控制器能识别的argument部分:

  module定义了使用哪一个模块,如users模块
  class定义了使用哪一个功能类,如你想让用户login还是logout
  event定义了使用哪一个具体事件

  这样一个更复杂的例子可以解释上面的各个argument最终组成的请求URL:

  http://example.com/index.php?module=users&class=login

  这段请求告诉控制器应该载入users模块,然后是login类,最后因为没有定义具体事件,所以运行login::__default()默认事件。

  以下是具体代码部分:

<?php
 /**
  * index.php
  *
  * @author Joe Stump <joe@joestump.net>
  * @copyright Joe Stump <joe@joestump.net>
  * @license http://www.opensource.org/licenses/gpl-license.php
  * @package Framework
 */

 require_once('config.php');

 // {{{ __autoload($class)
 /**
  * __autoload
  *
  * Autoload is ran by PHP when it can't find a class it is trying to load.
  * By naming our classes intelligently we should be able to load most classes
  * dynamically.
  *
  * @author Joe Stump <joe@joestump.net>
  * @param string $class Class name we're trying to load
  * @return void
  * @package Framework
 */

 function __autoload($class)
 {
  $file = str_replace('_','/',substr($class,2)).'.php';
  require_once(FR_BASE_PATH.'/includes/'.$file);
 }
 // }}}

 if (isset($_GET['module'])) {
  $module = $_GET['module'];
  if (isset($_GET['event'])) {
   $event = $_GET['event'];
  } else {
   $event = '__default';
  }

 if (isset($_GET['class'])) {
  $class = $_GET['class'];
 } else {
  $class = $module;
 }

 $classFile = FR_BASE_PATH.'/modules/'.$module.'/'.$class.'.php';
 if (file_exists($classFile)) {
  require_once($classFile);
  if (class_exists($class)) {
   try {
    $instance = new $class();
    if (!FR_Module::isValid($instance)) {
     die("Requested module is not a valid framework module!");
    }

    $instance->moduleName = $module;
    if ($instance->authenticate()) {
     try {
      $result = $instance->$event();
      if (!PEAR::isError($result)) {
       $presenter = FR_Presenter::factory($instance->presenter,$instance);

      if (!PEAR::isError($presenter)) {
       $presenter->display();
      } else {
       die($presenter->getMessage());
      }
     }
    } catch (Exception $error) {
     die($error->getMessage());
    }
   } else {
    die("You do not have access to the requested page!");
   }
  } catch (Exception $error) {
   die($error->getMessage());
  }
 } else {
  die("An valid module for your request was not found");
 }
 } else {
  die("Could not find: $classFile");
 }
 } else {
  die("A valid module was not specified");
}

?>

  接下来是以上代码具体的注释:

  载入“config.php”

  定义__autoload()函数。这是PHP5里面的一个新函数,方便动态地载入各个类。

  如果一个argument被定义,那么载入相关的模块、类和具体事件

  接下来就是一些判断以及错误的具体操作

  最后一切无误后就载入表述层

  【友好URL】

  如果你觉得上面例子讲到的请求URL让你觉得不舒服的话,那么就用mod_rewrite来实现友好URL吧。接下来是作者给这个框架写的实际重写标准代码:

RewriteEngine On

# Change the URI here to whatever you want your homepage to be

RewriteRule ^/$ /index.php?module=welcome [L,QSA]

# Changes /index.php?module=welcome to /welcome

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f

RewriteRule ^/([^/]*)$ /index.php?module=$1 [L,QSA]

# Changes /index.php?module=users&class=login to /users/login

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f

RewriteRule ^/([^/]*)/([^/]*)$ /index.php?module=$1&class=$2 [L,QSA]

# Changes /index.php?module=users&class=login&event=foo

# to /users/login/foo.html

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-d

RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f

RewriteRule ^/([^/]*)/([^/]*)/([^/]*).html$ \

/index.php?module=$1&class=$2&event=$3 [L,QSA]

Extending the Controller

  【扩展控制器】

  拥有一个集中控制器的一点好处就是你加入一些功能后,马上就能通过控制器体现出来。以下是几个可以扩展一下这个控制器的点子,使这个框架的整体能力更加强大:
 
  你可以使用PHP5里一个新东西SoapServer来自动检测一个请求是否为SOAP

  你可以使用控制器来过滤所有的自动全局变量如$_GET和$_POST以防止恶意HTML代码等

  你可以使用控制器即时地转换表述层,比如从默认的方式转到PDF方式

  你可以直接在控制器中加入缓存机制,这样的好处是应用程序整体都能使用到缓存以提高效率

  当然,需要注意一点的是,你在控制器中所增加的功能将体现在程序全局。如你想过滤所有的自动全局变量,但是很多应用程序的管理员需要使用到一些HTML代码,反而成为一件棘手的事情(译者注:本人的想法是可以加一个if条件语句,在加载特定模块时不应用过滤功能即可)。
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Alih keluar nilai pendua daripada tatasusunan PHP menggunakan ungkapan biasa Alih keluar nilai pendua daripada tatasusunan PHP menggunakan ungkapan biasa Apr 26, 2024 pm 04:33 PM

Cara mengalih keluar nilai pendua daripada tatasusunan PHP menggunakan ungkapan biasa: Gunakan ungkapan biasa /(.*)(.+)/i untuk memadankan dan menggantikan pendua. Lelaran melalui elemen tatasusunan dan semak padanan menggunakan preg_match. Jika ia sepadan, langkau nilai jika tidak, tambahkannya pada tatasusunan baharu tanpa nilai pendua.

Untuk apa pengaturcaraan dan apakah kegunaan mempelajarinya? Untuk apa pengaturcaraan dan apakah kegunaan mempelajarinya? Apr 28, 2024 pm 01:34 PM

1. Pengaturcaraan boleh digunakan untuk membangunkan pelbagai perisian dan aplikasi, termasuk tapak web, aplikasi mudah alih, permainan dan alat analisis data. Bidang aplikasinya sangat luas, meliputi hampir semua industri, termasuk penyelidikan saintifik, penjagaan kesihatan, kewangan, pendidikan, hiburan, dll. 2. Pembelajaran pengaturcaraan boleh membantu kita meningkatkan kemahiran menyelesaikan masalah dan kemahiran berfikir logik. Semasa pengaturcaraan, kita perlu menganalisis dan memahami masalah, mencari penyelesaian dan menterjemahkannya ke dalam kod. Cara berfikir ini boleh memupuk kebolehan analitikal dan abstrak kita dan meningkatkan keupayaan kita untuk menyelesaikan masalah praktikal.

Bina aplikasi berasaskan pelayar dengan Golang Bina aplikasi berasaskan pelayar dengan Golang Apr 08, 2024 am 09:24 AM

Bina aplikasi berasaskan pelayar dengan Golang Golang digabungkan dengan JavaScript untuk membina pengalaman bahagian hadapan yang dinamik. Pasang Golang: Lawati https://golang.org/doc/install. Sediakan projek Golang: Cipta fail bernama main.go. Menggunakan GorillaWebToolkit: Tambahkan kod GorillaWebToolkit untuk mengendalikan permintaan HTTP. Cipta templat HTML: Cipta index.html dalam subdirektori templat, yang merupakan templat utama.

Kunci Pengekodan: Membuka Kunci Kuasa Python untuk Pemula Kunci Pengekodan: Membuka Kunci Kuasa Python untuk Pemula Oct 11, 2024 pm 12:17 PM

Python ialah bahasa pengenalan pengaturcaraan yang ideal untuk pemula melalui kemudahan pembelajaran dan ciri yang berkuasa. Asasnya termasuk: Pembolehubah: digunakan untuk menyimpan data (nombor, rentetan, senarai, dll.). Jenis data: Mentakrifkan jenis data dalam pembolehubah (integer, titik terapung, dll.). Operator: digunakan untuk operasi matematik dan perbandingan. Aliran kawalan: Kawal aliran pelaksanaan kod (penyataan bersyarat, gelung).

Java Made Simple: Panduan Pemula untuk Kuasa Pengaturcaraan Java Made Simple: Panduan Pemula untuk Kuasa Pengaturcaraan Oct 11, 2024 pm 06:30 PM

Java Made Simple: Panduan Permulaan untuk Kuasa Pengaturcaraan Pengenalan Java ialah bahasa pengaturcaraan berkuasa yang digunakan dalam segala-galanya daripada aplikasi mudah alih hingga sistem peringkat perusahaan. Untuk pemula, sintaks Java adalah ringkas dan mudah difahami, menjadikannya pilihan ideal untuk pembelajaran pengaturcaraan. Sintaks Asas Java menggunakan paradigma pengaturcaraan berorientasikan objek berasaskan kelas. Kelas ialah templat yang menyusun data dan tingkah laku yang berkaitan bersama-sama. Berikut ialah contoh kelas Java yang mudah: publicclassPerson{privateStringname;privateintage;

Penyelesaian Masalah dengan Python: Buka Kunci Penyelesaian Berkuasa sebagai Pengekod Pemula Penyelesaian Masalah dengan Python: Buka Kunci Penyelesaian Berkuasa sebagai Pengekod Pemula Oct 11, 2024 pm 08:58 PM

Pythonmemperkasakan pemula dalam menyelesaikan masalah.Sintaksnya yang mesra pengguna, perpustakaan luas, dan ciri-ciri seperti pembolehubah, pernyataan bersyarat, dan pembangunan kod yang cekap boleh dilonggarkan. Daripada mengurus data untuk mengawal aliran program dan melaksanakan tugasan berulang, Pythonprovid

Cipta Masa Depan: Pengaturcaraan Java untuk Pemula Mutlak Cipta Masa Depan: Pengaturcaraan Java untuk Pemula Mutlak Oct 13, 2024 pm 01:32 PM

Java ialah bahasa pengaturcaraan popular yang boleh dipelajari oleh pembangun pemula dan berpengalaman. Tutorial ini bermula dengan konsep asas dan diteruskan melalui topik lanjutan. Selepas memasang Kit Pembangunan Java, anda boleh berlatih pengaturcaraan dengan mencipta program "Hello, World!" Selepas anda memahami kod, gunakan gesaan arahan untuk menyusun dan menjalankan program, dan "Hello, World!" Pembelajaran Java memulakan perjalanan pengaturcaraan anda, dan apabila penguasaan anda semakin mendalam, anda boleh mencipta aplikasi yang lebih kompleks.

Demystifying C: Laluan Yang Jelas dan Mudah untuk Pengaturcara Baharu Demystifying C: Laluan Yang Jelas dan Mudah untuk Pengaturcara Baharu Oct 11, 2024 pm 10:47 PM

C ialah pilihan ideal untuk pemula untuk mempelajari pengaturcaraan sistem Ia mengandungi komponen berikut: fail pengepala, fungsi dan fungsi utama. Program C mudah yang boleh mencetak "HelloWorld" memerlukan fail pengepala yang mengandungi pengisytiharan fungsi input/output standard dan menggunakan fungsi printf dalam fungsi utama untuk mencetak. Program C boleh disusun dan dijalankan dengan menggunakan pengkompil GCC. Selepas anda menguasai asas, anda boleh beralih kepada topik seperti jenis data, fungsi, tatasusunan dan pengendalian fail untuk menjadi pengaturcara C yang mahir.

See all articles