Jadual Kandungan
构建自己的PHP框架--抽象Controller的基类
Rumah pembangunan bahagian belakang tutorial php 构建自己的PHP框架--抽象Controller的基类_PHP教程

构建自己的PHP框架--抽象Controller的基类_PHP教程

Jul 12, 2016 am 09:08 AM
bingkai

构建自己的PHP框架--抽象Controller的基类

我们将简单的路由解析和执行,从入口文件public/index.php中移入到框架中。入口文件顿时变得清爽无比~~
 
但是,去我们的controller里看一下,会看到如下的code:
 
    public function actionView()
    {
        $body = 'Test body information';
        require '../views/site/view.php';
    }
难道我们每写一个要去渲染页面的action,都要去找相应路径的view,然后把它require进来。肯定不能这样,所以我们要抽象出一个Controller的基类,实现一个渲染页面的方法,让其他的controller继承,就可以使用相应的方法。
 
不用说,这个controller的基类肯定要写到框架里。而且也要写两个,一个放在base中,一个放在web中,web中的Controller继承base中的。
 
先来看在base中的
 
 

1

2

3

4

5

6

7

8

9

10

<?php

namespace sf\base;

 

/**

 * Controller is the base class for classes containing controller logic.

 * @author Harry Sun <sunguangjun@126.com>

 */

class Controller

{

}

Salin selepas log masuk

只有一个空类,等待添加内容。
再来看web中的

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<?php

namespace sf\web;

 

/**

 * Controller is the base class for classes containing controller logic.

 * @author Harry Sun <sunguangjun@126.com>

 */

class Controller extends \sf\base\Controller

{

    /**

     * Renders a view

     * @param string $view the view name.

     * @param array $params the parameters (name-value pairs) that should be made available in the view.

     */

    public function render($view, $params = [])

    {

        extract($params);

        return require &#39;../views/&#39; . $view . &#39;.php&#39;;

    }

}

Salin selepas log masuk

可以看到,我们首先从数组中把变量导入到当前的符号表中,然后引入相应的view页面。
然后,在SiteController,我们只需要这么写就可以了。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

<?php

namespace app\controllers;

 

use sf\web\Controller;

 

class SiteController extends Controller

{

    public function actionTest()

    {

        echo &#39;success!&#39;;

    }

 

    public function actionView()

    {

        $this->render(&#39;site/view&#39;, [&#39;body&#39; => &#39;Test body information&#39;]);

    }

}

Salin selepas log masuk

然后,访问www.Bkjia.com,就可以看到跟之前一样的页面了。
我们来完善一下base中的Controller

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<?php

namespace sf\base;

 

/**

 * Controller is the base class for classes containing controller logic.

 * @author Harry Sun <sunguangjun@126.com>

 */

class Controller

{

    /**

     * @var string the ID of this controller.

     */

    public $id;

    /**

     * @var Action the action that is currently being executed.

     */

    public $action;

}

Salin selepas log masuk

添加了两个属性,分别来记录当前的controller和action。
然后,我们要在解析router之后,将其赋值,code如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<?php

namespace sf\web;

 

/**

 * Application is the base class for all application classes.

 * @author Harry Sun <sunguangjun@126.com>

 */

class Application extends \sf\base\Application

{

    /**

     * Handles the specified request.

     * @return Response the resulting response

     */

    public function handleRequest()

    {

        $router = $_GET[&#39;r&#39;];

        list($controllerName, $actionName) = explode(&#39;/&#39;, $router);

        $ucController = ucfirst($controllerName);

        $controllerNameAll = $this->controllerNamespace . &#39;\\&#39; . $ucController . &#39;Controller&#39;;

        $controller = new $controllerNameAll();

        $controller->id = $controllerName;

        $controller->action = $actionName;

        return call_user_func([$controller, &#39;action&#39;. ucfirst($actionName)]);

    }

}

Salin selepas log masuk

然后我们就可以在controller和view中拿到相应的controller名字和action名字了,将view.php修改如下:

1

2

3

4

5

6

7

8

9

10

<html>

    <head>

        <title>title</title>

    <head>

    <body>

        <?php echo $this->id;?><br/>

        <?php echo $this->action;?><br/>

        <?php echo $body;?>

    </body>

</html>

Salin selepas log masuk

然后我们就可以看到如下的页面了
有人觉得现在大家都前后端分离了,我们不需要用PHP去render一个页面,只需要返回一个josn字符串就好了,这个就更简单了,在web的Controller中添加一个toJson方法即可

1

2

3

4

5

6

7

8

9

10

11

/**

 * Convert a array to json string

 * @param string $data

 */

public function toJson($data)

{

    if (is_string($data)) {

        return $data;

    }

    return json_encode($data);

}

Salin selepas log masuk

 

 
 
将SiteController中的actionTest,修改如下:
 
    public function actionTest()
    {
        $data = ['first' => 'awesome-php-zh_CN', 'second' => 'simple-framework'];
        echo $this->toJson($data);
    }

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1053351.htmlTechArticle构建自己的PHP框架--抽象Controller的基类 我们将简单的路由解析和执行,从入口文件public/index.php中移入到框架中。入口文件顿时变得清爽无...
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)

Bagaimana untuk menilai keberkesanan kos sokongan komersial untuk rangka kerja Java Bagaimana untuk menilai keberkesanan kos sokongan komersial untuk rangka kerja Java Jun 05, 2024 pm 05:25 PM

Menilai kos/prestasi sokongan komersial untuk rangka kerja Java melibatkan langkah-langkah berikut: Tentukan tahap jaminan yang diperlukan dan jaminan perjanjian tahap perkhidmatan (SLA). Pengalaman dan kepakaran pasukan sokongan penyelidikan. Pertimbangkan perkhidmatan tambahan seperti peningkatan, penyelesaian masalah dan pengoptimuman prestasi. Timbang kos sokongan perniagaan terhadap pengurangan risiko dan peningkatan kecekapan.

Bagaimanakah pilihan rangka kerja PHP yang ringan mempengaruhi prestasi aplikasi? Bagaimanakah pilihan rangka kerja PHP yang ringan mempengaruhi prestasi aplikasi? Jun 06, 2024 am 10:53 AM

Rangka kerja PHP yang ringan meningkatkan prestasi aplikasi melalui saiz kecil dan penggunaan sumber yang rendah. Ciri-cirinya termasuk: saiz kecil, permulaan pantas, penggunaan memori yang rendah, kelajuan dan daya tindak balas yang dipertingkatkan, dan penggunaan sumber yang dikurangkan: SlimFramework mencipta API REST, hanya 500KB, responsif yang tinggi dan daya pemprosesan yang tinggi.

Amalan terbaik dokumentasi rangka kerja Golang Amalan terbaik dokumentasi rangka kerja Golang Jun 04, 2024 pm 05:00 PM

Menulis dokumentasi yang jelas dan komprehensif adalah penting untuk rangka kerja Golang. Amalan terbaik termasuk mengikut gaya dokumentasi yang ditetapkan, seperti Panduan Gaya Pengekodan Google. Gunakan struktur organisasi yang jelas, termasuk tajuk, subtajuk dan senarai, serta sediakan navigasi. Menyediakan maklumat yang komprehensif dan tepat, termasuk panduan permulaan, rujukan API dan konsep. Gunakan contoh kod untuk menggambarkan konsep dan penggunaan. Pastikan dokumentasi dikemas kini, jejak perubahan dan dokumen ciri baharu. Sediakan sokongan dan sumber komuniti seperti isu dan forum GitHub. Buat contoh praktikal, seperti dokumentasi API.

Bagaimana untuk memilih rangka kerja golang terbaik untuk senario aplikasi yang berbeza Bagaimana untuk memilih rangka kerja golang terbaik untuk senario aplikasi yang berbeza Jun 05, 2024 pm 04:05 PM

Pilih rangka kerja Go terbaik berdasarkan senario aplikasi: pertimbangkan jenis aplikasi, ciri bahasa, keperluan prestasi dan ekosistem. Rangka kerja Common Go: Gin (aplikasi Web), Echo (Perkhidmatan Web), Fiber (daya pemprosesan tinggi), gorm (ORM), fasthttp (kelajuan). Kes praktikal: membina REST API (Fiber) dan berinteraksi dengan pangkalan data (gorm). Pilih rangka kerja: pilih fasthttp untuk prestasi utama, Gin/Echo untuk aplikasi web yang fleksibel, dan gorm untuk interaksi pangkalan data.

Bagaimanakah keluk pembelajaran rangka kerja PHP berbanding rangka kerja bahasa lain? Bagaimanakah keluk pembelajaran rangka kerja PHP berbanding rangka kerja bahasa lain? Jun 06, 2024 pm 12:41 PM

Keluk pembelajaran rangka kerja PHP bergantung pada kecekapan bahasa, kerumitan rangka kerja, kualiti dokumentasi dan sokongan komuniti. Keluk pembelajaran rangka kerja PHP adalah lebih tinggi jika dibandingkan dengan rangka kerja Python dan lebih rendah jika dibandingkan dengan rangka kerja Ruby. Berbanding dengan rangka kerja Java, rangka kerja PHP mempunyai keluk pembelajaran yang sederhana tetapi masa yang lebih singkat untuk bermula.

Perbandingan prestasi rangka kerja Java Perbandingan prestasi rangka kerja Java Jun 04, 2024 pm 03:56 PM

Mengikut penanda aras, untuk aplikasi kecil dan berprestasi tinggi, Quarkus (permulaan pantas, memori rendah) atau Micronaut (TechEmpower cemerlang) adalah pilihan yang ideal. SpringBoot sesuai untuk aplikasi bertindan penuh yang besar, tetapi mempunyai masa permulaan dan penggunaan memori yang lebih perlahan.

Penjelasan praktikal terperinci pembangunan rangka kerja golang: Soalan dan Jawapan Penjelasan praktikal terperinci pembangunan rangka kerja golang: Soalan dan Jawapan Jun 06, 2024 am 10:57 AM

Dalam pembangunan rangka kerja Go, cabaran biasa dan penyelesaiannya ialah: Pengendalian ralat: Gunakan pakej ralat untuk pengurusan dan gunakan perisian tengah untuk mengendalikan ralat secara berpusat. Pengesahan dan kebenaran: Sepadukan perpustakaan pihak ketiga dan cipta perisian tengah tersuai untuk menyemak bukti kelayakan. Pemprosesan serentak: Gunakan goroutine, mutex dan saluran untuk mengawal akses sumber. Ujian unit: Gunakan pakej, olok-olok dan stub untuk pengasingan dan alat liputan kod untuk memastikan kecukupan. Penerapan dan pemantauan: Gunakan bekas Docker untuk membungkus penggunaan, menyediakan sandaran data dan menjejak prestasi dan ralat dengan alat pengelogan dan pemantauan.

Perbandingan prestasi rangka kerja Golang: metrik untuk membuat pilihan bijak Perbandingan prestasi rangka kerja Golang: metrik untuk membuat pilihan bijak Jun 05, 2024 pm 10:02 PM

Apabila memilih rangka kerja Go, penunjuk prestasi utama (KPI) termasuk: masa tindak balas, pemprosesan, konkurensi dan penggunaan sumber. Dengan menanda aras dan membandingkan KPI rangka kerja, pembangun boleh membuat pilihan termaklum berdasarkan keperluan aplikasi, dengan mengambil kira beban yang dijangkakan, bahagian kritikal prestasi dan kekangan sumber.

See all articles