zl程序教程

您现在的位置是:首页 >  IT要闻

当前栏目

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

2023-02-18 16:33:39 时间

文章目录

页面方法

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