首頁 php框架 Laravel Laravel 單元測試 PHPUnit 基本使用

Laravel 單元測試 PHPUnit 基本使用

May 14, 2020 am 09:56 AM
laravel php phpunit

Laravel 單元測試 PHPUnit 基本使用

介紹

PHPUnit 是最古老且最著名的 PHP 單元測試套件之一。它主要用於單元測試,這意味著可以用盡可能小的組件測試程式碼,但是它也非常靈活,可以用於許多不僅僅是單元測試。

PHPUnit 包含許多簡單和靈活的斷言允許您輕鬆地測試程式碼,當您測試特定的元件時,這些斷言非常有效。但是,它確實意味著測試更高級的程式碼(如控制器和表單提交驗證)可能會複雜得多。

為了幫助開發人員更輕鬆地進行開發, Laravel 框架  包含了一系列 應用程式測試幫助程式 ,讓您可以編寫非常簡單的 PHPUnit 測試來測試應用程式的複雜部分。

本教學的目的是向您介紹 PHPUnit 測試的基礎知識,使用預設 PHPUnit 斷言和 Laravel 測試助手。這樣做的目的是在本教程結束時,您可以自信地為應用程式編寫基本測試。

前提

本教學假設您已經熟悉 Laravel 並知道如何在應用程式目錄中執行命令(例如 php artisan 命令)。我們將建立幾個基本的範例類別來學習不同的測試工具如何運作,因此建議您為本教學建立一個新的應用程式。

如果已經安裝了Laravel ,則可以透過執行以下命令來建立新的測試應用程式:

laravel new phpunit-tests
登入後複製

或者,您可以直接使用Composer 建立新應用程式:

composer create-project laravel/laravel --prefer-dist
登入後複製

其他安裝方法也可以在Laravel 文件中找到。

建立一個新的測試

使用 PHPUnit 的第一步是建立一個新的測試類別。測試類別的約定是它們儲存在應用程式目錄的 ./tests/ 下。在這個資料夾中,每個測試類別都被命名為 Test.php 。這種格式允許 PHPUnit 查找每個測試類別 --- 它將忽略任何不以 Test.php 結尾的檔案。

在新的Laravel 應用程式中,你會注意到./tests/ 目錄中有兩個檔案:  ExampleTest.php 和TestCase.php.  TestCase.php 檔案是一個引導檔案用於在我們的測試中設定Laravel 環境。這允許我們在測試中使用 Laravel Facades 並為測試助理提供框架,我們將在稍後介紹。 ExampleTest.php 是一個範例測試類,其中包含使用應用程式測試助手的基本測試案例 - 暫時忽略它。

要建立一個新的測試類,我們可以手動建立一個新文件,或是執行由Laravel 提供的Artisan 指令make:test 

為了建立一個名為BasicTest 的測試類,我們只需要執行這個artisan 指令:

php artisan make:test BasicTest
登入後複製

Laravel 將會建立一個如下所示的基本測試類別:

<?php
class BasicTest extends TestCase
{
    /**
    * 一个基本的测试示例。
    *
    * @return void
    */
    public function testExample()
    {
        $this->assertTrue(true);
    }
}
登入後複製

這裡要注意的最重要的事情是test 方法名稱上的前綴,與Test 類別名稱後綴一樣,這樣test 前綴告訴PHPUnit 在測試時要執行哪些方法。如果您忘記了 test 前綴,那麼 PHPUnit 將忽略該方法。

在我們第一次運行測試套件之前,有必要指出 Laravel 提供的預設 phpunit.xml 檔案。 PHPUnit 會在執行時自動在目前目錄中尋找名為 phpunit.xml 或 phpunit.xml.dist 的檔案。您可以在此處配置測試的特定選項。

這個文件中有很多信息,但是現在最重要的部分是在testsuite 目錄定義:

<?xml version="1.0" encoding="UTF-8"?>
<phpunit ... >
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>./tests/</directory>
        </testsuite>
    </testsuites>
    ...
</phpunit>
登入後複製

這將告訴PHPUnit 運行時在./tests/ 目錄中找到的測試,正如我們之前所知,這是儲存測試的約定。

現在我們已經建立了一個基本測試,並且知道了 PHPUnit 配置,現在是第一次執行測試的時候了。

您可以透過執行以下phpunit 指令來執行測試:

./vendor/bin/phpunit
登入後複製

您應該會看到與此類似的輸出:

PHPUnit 4.8.19 by Sebastian Bergmann and contributors.
..
Time: 103 ms, Memory: 12.75Mb
OK (2 tests, 3 assertions)
登入後複製

現在我們已經有了一個有效的PHPUnit設置,現在是時候開始編寫一個基本測試了。

注意,它會統計 2 個測試和 3 個斷言,因為 ExampleTest.php 檔案包含了一個帶有兩個斷言的測試。我們的新基本測試包括一個單獨的斷言,該斷言已通過。

寫一個基礎測試

為了幫助PHPUnit 提供的基本斷言,我們將首先建立一個提供一些簡單功能的基本類別

在. /app/ 目錄中建立一個名為Box.php 的新文件,並複製此範例類別:

<?php
namespace App;
class Box
{
    /**
    * @var array
    */
    protected $items = [];
    /**
    * 使用给定项构造框
    *
    * @param array $items
    */
    public function __construct($items = [])
    {
        $this->items = $items;
    }
    /**
    * 检查指定的项目是否在框中。
    *
    * @param string $item
    * @return bool
    */
    public function has($item)
    {
        return in_array($item, $this->items);
    }
    /**
    * 从框中移除项,如果框为空,则为 null 。
    *
    * @return string
    */
    public function takeOne()
    {
        return array_shift($this->items);
    }
    /**
    * 从包含指定字母开头的框中检索所有项目。
    *
    * @param string $letter
    * @return array
    */
    public function startsWith($letter)
    {
        return array_filter($this->items, function ($item) use ($letter) {
            return stripos($item, $letter) === 0;
        });
    }
}
登入後複製

接下來, 打開你的./tests/BasicTest.php 類別(我們之前建立的類別) ,並刪除預設建立的testExample 方法, 你應該留一個空類別。

我們現在將使用七個基本的 PHPUnit 斷言來為我們的 Box 類別編寫測試。這些斷言是:

  • assertTrue()

  • assertFalse()

  • assertEquals()

  • assertNull()

  • assertContains()

  • assertCount()

  • #assertEmpty()

assertTrue () 與assertFalse ()

#

assertTrue() 和 assertFalse() 允许你声明一个值等于 true 或 false 。这意味着它们非常适合测试返回布尔值的方法。在我们的 Box 类中,我们有一个名为 has($item) 的方法,当指定的项在 box 中或不在 box 中时,该方法返回对应返回 true 或 false .

要在 PHPUnit 中为此编写测试,我们可以执行以下操作:

<?php
use App\Box;
class BasicTest extends TestCase
{
    public function testHasItemInBox()
    {
        $box = new Box([&#39;cat&#39;, &#39;toy&#39;, &#39;torch&#39;]);
        $this->assertTrue($box->has(&#39;toy&#39;));
        $this->assertFalse($box->has(&#39;ball&#39;));
    }
}
登入後複製

注意我们如何只将一个参数传递给 assertTrue() 和 assertFalse() 方法,并且它是 has($item) 方法的输入.

如果您现在运行 ./vendor/bin/phpunit 命令,您会注意到输出包括:

OK (2 tests, 4 assertions)
登入後複製

这意味着我们的测试已经通过。

如果您将 assertFalse() 替换成 assertTrue() 并运行 phpunit 命令,输出将如下所示:

PHPUnit 4.8.19 by Sebastian Bergmann and contributors.
F.
Time: 93 ms, Memory: 13.00Mb
There was 1 failure:
1) BasicTest::testHasItemInBox
Failed asserting that false is true.
./tests/BasicTest.php:12
FAILURES!
Tests: 2, Assertions: 4, Failures: 1.
登入後複製

这告诉我们第 12 行的断言未能断言 false 值是 true - 因为我们将 assertFalse() 替换为 assertTrue() 。

将其交换回来,然后重新运行 PHPUnit 。测试应该再次通过,因为我们已经修复了破损的测试。

assertEquals () 与 assertNull ()

接下来,让我们看看 assertEquals(), 以及 assertNull()。

assertEquals() 用于比较变量实际值与预期值是否相等。我们用它来检查 takeOne() 方法的返回值是否为 Box 内的当前值。当 Box 为空时,takeOne() 将返回 null,我们亦可使用 assertNull() 来进行检查。

与 assertTrue()、assertFalse() 以及 assertNull() 不同,assertEquals() 需要两个参数。第一个参数为 预期 值,第二个参数则为 实际 值。

可参照如下代码实现以上断言(assertions):

<?php
use App\Box;
class BasicTest extends TestCase
{
    public function testHasItemInBox()
    {
        $box = new Box([&#39;cat&#39;, &#39;toy&#39;, &#39;torch&#39;]);
        $this->assertTrue($box->has(&#39;toy&#39;));
        $this->assertFalse($box->has(&#39;ball&#39;));
    }
    public function testTakeOneFromTheBox()
    {
        $box = new Box([&#39;torch&#39;]);
        $this->assertEquals(&#39;torch&#39;, $box->takeOne());
        // 当前 Box 为空,应当为 Null
        $this->assertNull($box->takeOne());
    }
}
登入後複製

运行 phpunit 命令,你应当看到如下输出:

OK (3 tests, 6 assertions)
登入後複製

assertContains () 和 assertCount () 以及 assertEmpty ()

终于,我们有三个作用于数组有关的断言,我们能够使用它们去检查 Box 类中的 startsWith($item) 方法。 assertContains() 断言传递进来的数组中包含指定值, assertCount() 断言数组的项数为指定数量,assertEmpty() 断言传递进来的数组为空。

让我们来执行以下测试:

<?php
use App\Box;
class BasicTest extends TestCase
{
    public function testHasItemInBox()
    {
        $box = new Box([&#39;cat&#39;, &#39;toy&#39;, &#39;torch&#39;]);
        $this->assertTrue($box->has(&#39;toy&#39;));
        $this->assertFalse($box->has(&#39;ball&#39;));
    }
    public function testTakeOneFromTheBox()
    {
        $box = new Box([&#39;torch&#39;]);
        $this->assertEquals(&#39;torch&#39;, $box->takeOne());
        // Null,现在这个 box 是空的。
        $this->assertNull($box->takeOne());
    }
    public function testStartsWithALetter()
    {
        $box = new Box([&#39;toy&#39;, &#39;torch&#39;, &#39;ball&#39;, &#39;cat&#39;, &#39;tissue&#39;]);
        $results = $box->startsWith(&#39;t&#39;);
        $this->assertCount(3, $results);
        $this->assertContains(&#39;toy&#39;, $results);
        $this->assertContains(&#39;torch&#39;, $results);
        $this->assertContains(&#39;tissue&#39;, $results);
        // 如果传递复数断言数组为空
        $this->assertEmpty($box->startsWith(&#39;s&#39;));
    }
}
登入後複製

保存并再一次运行你的测试:

OK (4 tests, 9 assertions)
登入後複製

恭喜你,你刚刚使用七个基础的 PHPUnit 断言完成了对 Box 类的全部测试。通过这些简单的断言你能够做许多事,对于其他断言,大多数要更复杂,不过它们仍遵循以上使用规则。

测试你的程序

在你的程序里,对每个组件进行单元测试在很多情况下都是有必要的,而且也应该成为你开发过程中必不可少的一部分,但这并不是你需要做的全部的测试。当你构建一个包含复杂视图、导航和表单的程序时,你同样想测试这些组件。这时,Laravel 的测试助手可以使这些测试像单元测试简单组件一样容易。

我们之前查看在 ./tests/ 目录下的默认文件时跳过了 ./tests/ExampleTest.php 文件。 现在打开它,内容如下所示:

<?php
class ExampleTest extends TestCase
{
    /**
* 一个基本功能测试示例。
*
* @return void
*/
    public function testBasicExample()
    {
        $this->visit(&#39;/&#39;)
             ->see(&#39;Laravel 5&#39;);
    }
}
登入後複製

我们可以看到这个测试示例非常简单。在不知道测试助手如何运作的情况下,我们可以猜测它的意思如下:

当我访问 / (根目录)

我应该看到 'Laravel 5'

如果你打开你的 web 浏览器,访问我们的程序(如果你没有启动你的 web 服务器,你可以运行 php artisan serve ),你应该可以在 web 根目录上看到屏幕上有 “Laravel 5” 的文本。 鉴于这个测试已经通过了 PHPUnit,我们可以很确定地说我们对这个测试示例改造是正确的。

这个测试确保了访问 / 路径,网页可以返回 “'Laravel 5” 的文本。一个如此简单的检查也许不代表什么,但如果你的网站上要显示关键信息,它就可以在一个别处的改动导致这个页面无法正常显示正确的信息时,防止你部署一个被损坏的程序。

visit ()、see () 以及 dontSee ()

现在尝试编写自己的测试,更进一步理解它吧。

首先,编辑 ./app/Http/routes.php ,增加一个新的路由。为了教程目的,我们创建希腊字母定义的路由:

<?php
Route::get(&#39;/&#39;,function () {
    return view(&#39;welcome&#39;);
});
Route::get(&#39;/alpha&#39;,function () {
    return view(&#39;alpha&#39;);
});
登入後複製

然后,创建视图文件 ./resources/views/alpha.blade.php,使用 Alpha 作为关键字,保存基本的 HTML 文件:

<!DOCTYPE html>
<html>
    <head>
        <title>Alpha</title>
    </head>
    <body>
        <p>This is the Alpha page.</p>
    </body>
</html>
登入後複製

打开浏览器,输入网址: http://localhost:8000/beta,页面会显示出 "This is the Alpha page." 的内容。

现在我们有了测试用到的模版文件,下一步,我们通过运行命令 make:test 来创建一个新的测试文件:

php artisan make:test AlphaTest
登入後複製

然后变成刚创建好的测试文件,按照框架提供的例子,测试 "alpha" 页面上没有包含 "beta" 。 我们可以使用方法 dontSee() ,它是 see() 的对应的反向方法。

下面代码是上面实现的简单例子:

<?php
class AlphaTest extends TestCase
{
    public function testDisplaysAlpha()
    {
        $this->visit(&#39;/alpha&#39;)
             ->see(&#39;Alpha&#39;)
             ->dontSee(&#39;Beta&#39;);
    }
}
登入後複製

保存并运行 PHPUnit (./vendor/bin/phpunit),测试代码应该会全部通过,你会看到像这样的测试状态内容显示:

OK (5 tests,12 assertions)
登入後複製

开发前先写测试

对于测试来说,测试驱动开发 (TDD) 是非常酷的方法,首先我们先写测试。写完测试并执行它们,你会发现测试没通过,接下来 我们编写满足测试的代码,再次执行测试,使测试通过。 接下来让我们开始。

首先,建立一个 BetaTest 类使用 make:test artisan 命令:

php artisan make:test BetaTest
登入後複製

接下来,更新测试用例以便检查 /beta 的路由 route 为「Beta」:

<?php
class BetaTest extends TestCase
{
    public function testDisplaysBeta()
    {
        $this->visit(&#39;/beta&#39;)
             ->see(&#39;Beta&#39;)
             ->dontSee(&#39;Alpha&#39;);
    }
}
登入後複製

现在使用 ./vendor/bin/phpunit 命令来执行测试。结果是一个看起来简洁但不好的错误信息,如下:

> ./vendor/bin/phpunit
PHPUnit 4.8.19 by Sebastian Bergmann and contributors.
....F.
Time: 144 ms, Memory: 14.25Mb
There was 1 failure:
1) BetaTest::testDisplaysBeta
一个对 [http://localhost/beta] 的请求失败了。收到状态码 [404]。
...
FAILURES!
Tests: 6, Assertions: 13, Failures: 1.
登入後複製

我们现在需要创建这个不存在的路由。让我们开始。

首先,编辑 ./app/Http/routes.php 文件来创建新的 /beta 路由:

<?php
Route::get(&#39;/&#39;, function () {
    return view(&#39;welcome&#39;);
});
Route::get(&#39;/alpha&#39;, function () {
    return view(&#39;alpha&#39;);
});
Route::get(&#39;/beta&#39;, function () {
    return view(&#39;beta&#39;);
});
登入後複製

接下来,在 ./resources/views/beta.blade.php 下创建如下视图模版:

<!DOCTYPE html>
<html>
    <head>
        <title>Beta</title>
    </head>
    <body>
        <p>This is the Beta page.</p>
    </body>
</html>
登入後複製

现在再一次执行 PHPUnit,结果应该再一次回到绿色。

> ./vendor/bin/phpunit
PHPUnit 4.8.19 by Sebastian Bergmann and contributors.
......
Time: 142 ms, Memory: 14.00Mb
OK (6 tests, 15 assertions)
登入後複製

这样我们就通过在完成新的页面之前写测试的方式,对 测试驱动开发 进行了实践。

click () 和 seePageIs ()

Laravel 也提供一个辅助函数 (click()) 允许测试点击页面中存在的连接 ,以及一个方法 (seePageIs()) 检查点击展示的结果页面。

让我们使用这两个辅助函数去执行在 Alpha 和 Beta 页面的链接。

首先,我们更新我们的测试。打开 AlphaTest 类,我们将添加一个新的测试方法,这将点击 「alpha」页面上的「Next」链接跳转到 「beta」页面。

新的测试代码如下:

<?php
class AlphaTest extends TestCase
{
    public function testDisplaysAlpha()
    {
        $this->visit(&#39;/alpha&#39;)
             ->see(&#39;Alpha&#39;)
             ->dontSee(&#39;Beta&#39;);
    }
    public function testClickNextForBeta()
    {
        $this->visit(&#39;/alpha&#39;)
             ->click(&#39;Next&#39;)
             ->seePageIs(&#39;/beta&#39;);
    }
}
登入後複製

注意到,在我们新建的 testClickNextForBeta() 方法中,我们并没有检查每一个页面的内容。 其他测试都成功的检查了两个页面的内容,所以这里我们只关心点击 「Next」链接将发送到 /beta。

你现在可以运行测试组件了,但就像预料的一样测试将不通过,因为我们还没有更新我们的 HTML。

接下来,我们将更新 BetaTest 来做类似的事情:

<?php
class BetaTest extends TestCase
{
    public function testDisplaysBeta()
    {
        $this->visit(&#39;/beta&#39;)
             ->see(&#39;Beta&#39;)
             ->dontSee(&#39;Alpha&#39;);
    }
    public function testClickNextForAlpha()
    {
        $this->visit(&#39;/beta&#39;)
             ->click(&#39;Previous&#39;)
             ->seePageIs(&#39;/alpha&#39;);
    }
}
登入後複製

接下来,我们更新我们的 HTML 模版。

./resources/views/alpha.blade.php:

<!DOCTYPE html>
<html>
    <head>
        <title>Alpha</title>
    </head>
    <body>
        <p>This is the Alpha page.</p>
        <p><a href="/beta">Next</a></p>
    </body>
</html>
./resources/views/beta.blade.php:
<!DOCTYPE html>
<html>
    <head>
        <title>Beta</title>
    </head>
    <body>
        <p>This is the Beta page.</p>
        <p><a href="/alpha">Previous</a></p>
    </body>
</html>
登入後複製

保存文件,再一次执行 PHPUnit:

> ./vendor/bin/phpunit
PHPUnit 4.8.19 by Sebastian Bergmann and contributors.
F....F..
Time: 175 ms, Memory: 14.00Mb
There were 2 failures:
1) AlphaTest::testDisplaysAlpha
Failed asserting that &#39;<!DOCTYPE html>
<html>
    <head>
        <title>Alpha</title>
    </head>
    <body>
        <p>This is the Alpha page.</p>
        <p><a href="/beta">Next</a></p>
    </body>
</html>
&#39; does not match PCRE pattern "/Beta/i".
2) BetaTest::testDisplaysBeta
Failed asserting that &#39;<!DOCTYPE html>
<html>
    <head>
        <title>Beta</title>
    </head>
    <body>
        <p>This is the Beta page.</p>
        <p><a href="/alpha">Previous</a></p>
    </body>
</html>
&#39; does not match PCRE pattern "/Alpha/i".
FAILURES!
Tests: 8, Assertions: 23, Failures: 2.
登入後複製

然而测试失败了。如果你仔细观察我们的新 HTML,你将注意到我们分别有术语 beta 和 alpha 在 /alpha 和 /beta 页面。这意味着我们需要稍微更改我们的测试让它们与误报不匹配。

在每一个 AlphaTest 和 BetaTest 类,更新 testDisplays* 方法去使用 dontSee(' page')。通过这种方式,这将仅仅匹配字符串而不是那个术语。

两个测试文件如下所示:

./tests/AlphaTest.php:

<?php
class AlphaTest extends TestCase
{
    public function testDisplaysAlpha()
    {
        $this->visit(&#39;/alpha&#39;)
             ->see(&#39;Alpha&#39;)
             ->dontSee(&#39;Beta page&#39;);
    }
    public function testClickNextForBeta()
    {
        $this->visit(&#39;/alpha&#39;)
             ->click(&#39;Next&#39;)
             ->seePageIs(&#39;/beta&#39;);
    }
}
登入後複製

./tests/BetaTest.php:

<?php
class BetaTest extends TestCase
{
    public function testDisplaysBeta()
    {
        $this->visit(&#39;/beta&#39;)
             ->see(&#39;Beta&#39;)
             ->dontSee(&#39;Alpha page&#39;);
    }
    public function testClickNextForAlpha()
    {
        $this->visit(&#39;/beta&#39;)
             ->click(&#39;Previous&#39;)
             ->seePageIs(&#39;/alpha&#39;);
    }
}
登入後複製

再一次运行你的测试,所有的测试都应该通过了。我们现在已经测试我们所有的新文件,包括页面中的 Next/Previous 链接。

通过 Semaphore 对 PHPUnit 持续集成

通过 Semaphore 设置 持续集成你可以自动执行你的测试。

这样每一次你进行 git push 提交代码的时候都会执行你的测试,并且 Semaphore 预装了所有最新的 PHP 版本。

如果你还没有一个 Semaphore 账户, 先去 注册一个免费的 Semaphore 账户 。接下来需要做的是将它 添加到你的项目,并按照提示逐步去做来执行你的测试:

composer install --prefer-source

phpunit

关于 PHP 持续集成 的更多信息,请参照 Semaphore 文档。

结语

你应该注意到本教程中的所有测试都有一个共同的主题:它们都非常简单。 这是学习如何使用基本的测试断言和辅助函数,并且尽可能的使用它们的好处之一。编写测试越简单,测试就越容易理解和维护。

掌握了本教程中介绍的 PHPUnit 断言之后,你还可以去 PHPUnit 文档 找到更多内容。 所有的断言都遵循基本的模式,但你会发现,在大多数测试中都会返回基本的断言。

对于 PHPUnit 断言来说,Laravel 的测试辅助函数是极好的补充,这让应用程序的测试变的非常容易。也就是说,重要的是要认识到,对于我们写测试,我们只检查关键信息,而不是整个页面。这使得测试变得简单,并允许页面内容随着应用程序的变化而变化。如果关键信息仍然存在,测试仍然通过,每个人都会满意。

推荐教程:《Laravel开发》《PHP教程

以上是Laravel 單元測試 PHPUnit 基本使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

PHP和Python:解釋了不同的範例 PHP和Python:解釋了不同的範例 Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

在PHP和Python之間進行選擇:指南 在PHP和Python之間進行選擇:指南 Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

laravel入門實例 laravel入門實例 Apr 18, 2025 pm 12:45 PM

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

PHP和Python:深入了解他們的歷史 PHP和Python:深入了解他們的歷史 Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

PHP的影響:網絡開發及以後 PHP的影響:網絡開發及以後 Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 解決 Craft CMS 中的緩存問題:使用 wiejeben/craft-laravel-mix 插件 Apr 18, 2025 am 09:24 AM

在使用CraftCMS開發網站時,常常會遇到資源文件緩存的問題,特別是當你頻繁更新CSS和JavaScript文件時,舊版本的文件可能仍然被瀏覽器緩存,導致用戶無法及時看到最新的更改。這個問題不僅影響用戶體驗,還會增加開發和調試的難度。最近,我在項目中遇到了類似的困擾,經過一番探索,我找到了wiejeben/craft-laravel-mix這個插件,它完美地解決了我的緩存問題。

laravel用戶登錄功能 laravel用戶登錄功能 Apr 18, 2025 pm 12:48 PM

Laravel 提供了一個全面的 Auth 框架,用於實現用戶登錄功能,包括:定義用戶模型(Eloquent 模型)創建登錄表單(Blade 模板引擎)編寫登錄控制器(繼承 Auth\LoginController)驗證登錄請求(Auth::attempt)登錄成功後重定向(redirect)考慮安全因素:哈希密碼、防 CSRF 保護、速率限制和安全標頭。此外,Auth 框架還提供重置密碼、註冊和驗證電子郵件等功能。詳情請參閱 Laravel 文檔:https://laravel.com/doc

laravel框架安裝方法 laravel框架安裝方法 Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

See all articles