【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月前
|
JSON 前端开发 API
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
Django 后端架构开发:通用表单视图、组件对接、验证机制和组件开发
63 2
|
3月前
|
JavaScript UED
以 Vue 3 项目为例,多个请求下如何全局封装 Loading 的展示与关闭?其中大有学问!
以 Vue 3 项目为例,多个请求下如何全局封装 Loading 的展示与关闭?其中大有学问!
|
3月前
|
存储 运维 前端开发
中后台前端开发问题之定义编排对象如何解决
中后台前端开发问题之定义编排对象如何解决
27 0
|
3月前
|
开发工具 Android开发
Android项目架构设计问题之外部客户方便地设置回调如何解决
Android项目架构设计问题之外部客户方便地设置回调如何解决
27 0
若依修改,修改代理线上接口登录后台,若依框架如何使用线上的接口,如何在本地获取网页上的接口
若依修改,修改代理线上接口登录后台,若依框架如何使用线上的接口,如何在本地获取网页上的接口
|
6月前
|
前端开发 API Docker
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
web前端开发项目走proxy代理后端接口,构建发布到生产等环境后,如何修改api接口
89 0
|
6月前
|
前端开发 安全 开发工具
前端场景的代码部署方式都有那些?
【4月更文挑战第17天】本文分析了四种常见的前端代码部署方式:FTP/SFTP、Git、Docker和云服务平台部署。FTP/SFTP简单易用但效率低;Git提供版本控制,适合自动化部署,但有学习成本;Docker确保环境一致性,高效扩展,但较复杂;云服务平台弹性伸缩,高可用,但可能产生依赖和成本。选择部署方式应综合考虑项目需求、技术能力和成本。
179 0
|
6月前
|
前端开发
开发指南002-前后端信息交互规范-返回类ResponseResult
返回类有两个,一般返回类ResponseResult和分页返回类PageResult,本篇介绍ResponseResult
|
6月前
|
中间件
NetCore通过中间件判断接口是否存在 AllowAnonymousAttribute 特性
特性来判断一个接口是否被标记为允许匿名访问。以下是一个简单的中间件示例,用于在请求管道中检查接口是否被。.NET Core中,可以通过检查接口上的。在应用程序中使用此中间件,将其添加到。
84 0
|
PHP 索引
最为常用的Laravel操作(3)-模板
整理了 Laravel 框架模板最常用的操作,如模板常用语法、模板继承、流程控制、循环等。本系列共有 3 篇文章。
73 0