【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 
相关文章
|
10月前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
433 7
MySQL事务日志-Undo Log工作原理分析
|
8月前
|
Web App开发 SQL 安全
Invicti v25.3.0 发布,新增功能概览
Invicti v25.3.0 for Windows - Web 应用程序安全测试
98 3
Invicti v25.3.0 发布,新增功能概览
Java连接SQL Server数据库的详细操作流程
Java连接SQL Server数据库的详细操作流程
|
12月前
|
JavaScript
新年倒计时动画网页特效源码
新年倒计时动画网页特效源码是一段基于JS实现的中国节日元旦2025年倒计时动画效果代码,利用此代码,可以实现任意节日的倒计时效果,欢迎对此代码感兴趣的朋友前来下载参考。
209 6
|
项目管理
「软件项目管理」一文详解软件项目管理概述
该文章详细介绍了软件项目管理的关键概念、知识体系以及实施过程,涵盖了项目初始化、计划制定、执行控制到项目结束的全流程管理,并探讨了项目管理与过程管理在软件开发中的相互作用和应用。
「软件项目管理」一文详解软件项目管理概述
|
敏捷开发 测试技术 持续交付
极限编程(XP)原理与技巧:深入解析与实践
【5月更文挑战第8天】极限编程(XP)是一种敏捷开发方法,注重快速反馈、迭代开发和简单设计,以提高软件质量和项目灵活性。关键原则包括客户合作、集体代码所有权、持续集成等。实践中,使用故事卡片描述需求,遵循编程约定,实行TDD,持续重构,结对编程,并定期举行迭代会议。通过理解和应用XP,团队能提升效率,应对变化。
|
安全 JavaScript Java
智慧校园|基于Springboot+vue的智慧校园管理系统(源码+数据库+文档)
智慧校园|基于Springboot+vue的智慧校园管理系统(源码+数据库+文档)
531 0
|
存储 JSON JavaScript
10分钟深入探讨带你彻底理解浅拷贝与深拷贝
在JavaScript中,对象的拷贝是一项常见的操作。浅拷贝和深拷贝是两种常用的拷贝方式。浅拷贝只复制对象的引用,而深拷贝创建了一个全新的对象,包含与原始对象相同的值和结构。深拷贝和浅拷贝各有适用的场景和注意事项。本文将详细介绍如何实现一个完整而优雅的深拷贝函数,处理循环引用和特殊类型,优化性能,并探讨深拷贝和浅拷贝的应用场景、注意事项和相关属性。
|
存储 Ubuntu Java
Ubuntu安装JDK与IntelliJ IDEA
APT(Advanced Package Tool)是Linux系统上的包管理工具,能自动解决软件包依赖关系并从远程存储库中获取安装软件包。推荐使用APT管理软件包,因为它简便易用且有效地处理依赖关系,无需手动配置环境变量。这样,您可以轻松地安装和更新软件包,而APT会自动处理所有必需的依赖项,确保系统的稳定性和功能正常运行。
413 1
|
前端开发 测试技术 数据库
【Servlet】规范项目结构|基于Mysql+JDBC+Servlet 制作简易网页|实现登录、添加、删除、显示的功能(下)
【Servlet】规范项目结构|基于Mysql+JDBC+Servlet 制作简易网页|实现登录、添加、删除、显示的功能
167 0