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

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

@[toc]

页面方法

除了页面中已经定义的默认方法之外,还可以定义将在整个测试过程中使用的其他方法。
例如,如果我们正在开发音乐管理应用程序,我们可能需要一个公共方法来在应用程序中创建列表,而不是重写在每个页面和测试类中创建播放列表的逻辑。
此时,可以在页面类中定义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 
相关文章
|
3月前
|
前端开发 API Docker
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
42 0
|
6月前
|
数据采集 小程序 定位技术
[笔记]微信小程序开发《三》框架基础:小程序生命周期、全局配置、页面配置。
[笔记]微信小程序开发《三》框架基础:小程序生命周期、全局配置、页面配置。
|
11月前
|
网络安全 Windows
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
基于fastapi实现6个接口(token拦截, 2个业务流程,接口参数依赖校验)已经通过postman测试,记录部署服务器和windows,用于pytest接口自动化框架的接口测试对象
|
XML 存储 测试技术
soapUI 再谈SoapUI接口测试--文件组织与接口“布局”管理
soapUI 再谈SoapUI接口测试--文件组织与接口“布局”管理
55 0
|
前端开发
前端hook项目pc总结笔记-hook项目文件上传单独封装请求
前端hook项目pc总结笔记-hook项目文件上传单独封装请求
63 0
|
JavaScript 前端开发 API
ReactJS 101:构建可重用组件、管理状态和创建实际应用程序的初学者指南
ReactJS 101:构建可重用组件、管理状态和创建实际应用程序的初学者指南
122 0
|
数据安全/隐私保护
Appium自动化框架从0到1之 业务模块封装(登录页面业务操作)
Appium自动化框架从0到1之 业务模块封装(登录页面业务操作)
111 0
Appium自动化框架从0到1之 业务模块封装(登录页面业务操作)
|
前端开发 JavaScript 测试技术
【测试平台开发】22. 接口断言功能-前端vue组件开发
【测试平台开发】22. 接口断言功能-前端vue组件开发
【测试平台开发】22. 接口断言功能-前端vue组件开发
VS Code项目中共享自定义的代码片段方案
VS Code项目中共享自定义的代码片段方案
|
C++ 计算机视觉 开发者
VS Code项目中通过npm包的方式共享代码片段的方案实现
上周在 “VS Code项目中共享自定义的代码片段方案” 的文章中提到过一个共享代码片段的方案,上周经过调研后并没有发现现成的插件,就抽了点空实现了这个方案,最终产出Share Snippets 这个插件去实现这个设想