【Laravel】在企业级项目中使用Laravel框架中的工厂状态下的页面方法 Code Verifier以及错误处理

举报
黎燃 发表于 2024/08/14 22:05:27 2024/08/14
【摘要】 页面方法除了页面中已经定义的默认方法之外,还可以定义将在整个测试过程中使用的其他方法。例如,如果我们正在开发音乐管理应用程序,我们可能需要一个公共方法来在应用程序中创建列表,而不是重写在每个页面和测试类中创建播放列表的逻辑。此时,可以在页面类中定义createPlaylist方法:use Tests\Browser\Pages\Dashboard;$browser->visit(new D...

页面方法

除了页面中已经定义的默认方法之外,还可以定义将在整个测试过程中使用的其他方法。
例如,如果我们正在开发音乐管理应用程序,我们可能需要一个公共方法来在应用程序中创建列表,而不是重写在每个页面和测试类中创建播放列表的逻辑。
此时,可以在页面类中定义createPlaylist方法:

use Tests\Browser\Pages\Dashboard;

$browser->visit(new Dashboard)
        ->createPlaylist('My Playlist')
        ->assertSee('My Playlist');

定义方法后,可以在使用页面的任何测试中使用它。浏览器实例将自动传输页面方法。

Code Verifier

由于此授权不允许提供客户端密钥,因此开发人员需要生成代码验证程序和代码挑战的组合来请求令牌。
代码验证程序应为43到128个字符之间的随机字符串,包括字母、数字和-、.、_、~、,如[RFC 7636规范](tools.ietf.org/html/rfc7636)中所定义。
代码挑战应该是包含URL和文件名的安全字符的Base64编码字符串。应删除末尾的“=”字符,并且不应出现换行符、空白或其他附加字符。

$encoded = base64_encode(hash('sha256', $code_verifier, true));

$codeChallenge = strtr(rtrim($encoded, '='), '+/', '-_');

工厂状态

工厂状态允许任意组合模型工厂。通过进行适当的差异化修改,可以实现模型的各种不同状态。例如,可以修改用户模型中的默认属性值以标识挂起状态。可以使用state方法执行此状态转换。可以随意命名状态方法。毕竟,这只是一个典型的PHP方法:

public function suspended()
{
    return $this->state([
        'account_status' => 'suspended',
    ]);
}
 

如果状态转换需要访问工厂定义的其他属性,则可以将回调传递给状态方法。回调将接收为工厂定义的原始属性数组

多种关系

接下来,让我们探讨使用Larravel的平滑工厂方法构建Eloquent模型关系。首先,假设我们的应用程序具有User模型和Post模型。同样,假设User模型定义了与Post的hasMany关系。我们可以使用工厂提供的has方法创建一个具有三个职位的用户。has方法接受工厂实例:

  use App\Models\Post;
    use App\Models\User;

    $users = User::factory()
                ->has(Post::factory()->count(3))
                ->create();
 

按照惯例,当将Post模型传递给has方法时,Larravel将假设User模型必须具有定义关系的posts方法。如有必要,可以显式指定要操作的关系的名称:

  $users = User::factory()
                ->has(Post::factory()->count(3), 'posts')
                ->create();

当然,可以对相关模型执行状态操作。此外,如果状态更改需要访问父模型,则可以传递基于闭包的状态转换

错误处理

以下内容仅为站长或网友的个人学习笔记、总结和研究集。正确性无法保证,使用过程中产生的风险与本网站无关!
(adsbygoogle=window.adsbygoogle||[]).push({});
Larravel的所有异常都由app exceptions Handler类处理。此类包含两个方法:report和render。
Report()方法
report()方法用于报告或记录异常。它还可以用于发送日志异常,例如Sentry、Bugsnag和其他外部扩展服务
Render()方法
render()方法用于将异常呈现给HTTP响应并将其发送回浏览器。
除了这两个方法之外,appExceptionHandler类还包含一个名为“$dontReport”的重要属性。不会记录此属性使用的异常类型数组。
HTTP异常
一些异常描述了类似的HTTP错误代码:404500等。要在应用程序中的任何位置生成这样的响应,可以使用如下的abort()方法。

<!DOCTYPE html>
<html>
    
   <head>
      <title>404页面</title>
      <link href = "" rel = "stylesheet" 
         type = "text/css">
   
      <style>
         html, body {
            height: 100%;
         }
         body {
            margin: 0;
            padding: 0;
            width: 100%;
            color: #B0BEC5;
            display: table;
            font-weight: 100;
            'Lato';
         }
         .container {
            text-align: center;
            display: table-cell;
            vertical-align: middle;
         }
         .content {
            text-align: center;
            display: inline-block;
         }
         .title {
            font-size: 72px;
            margin-bottom: 40px;
         }
      </style>
		
   </head>
   <body>
	
      <div class = "container">
         <div class = "content">
            <div class = "title">404 错误</div>
         </div>
      </div>
		
   </body>
</html>

在这里插入图片描述
这里,<event class>应该使用我们在步骤1中使用的名称来替换应用程序,而<handler class>使用处理程序类的名称创建事件类的名称。新创建的处理程序类将存储在appHandlersEvents目录中。
步骤3-注册事件类及其事件服务提供程序类处理程序。
现在,我们需要在文件-appProvidersEventServiceProvider.php中注册事件。此文件包含一个数组:$listen。在此数组中,我们需要添加事件类作为键,添加事件处理程序类作为其值。
步骤4-触发事件。
最后一步是使用事件外观触发事件。fire()方法由事件类的对象调用。事件可按如下方式触发-

php artisan make:controller CreateStudentController 
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。