首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Laravel请求-如何在规则()中知道父/目标类名称

在Laravel中,可以通过使用Rule类的passes方法来实现在规则中获取父/目标类名称的需求。

首先,我们需要创建一个自定义的验证规则类,可以命名为ParentTargetRule。在该类中,我们需要实现passes方法来进行验证逻辑的编写。在passes方法中,我们可以通过$attribute参数获取当前属性的名称,通过$value参数获取当前属性的值。然后,我们可以使用get_class函数获取到父/目标类的名称。

下面是一个示例的代码:

代码语言:txt
复制
use Illuminate\Contracts\Validation\Rule;

class ParentTargetRule implements Rule
{
    public function passes($attribute, $value)
    {
        $parentTarget = get_class($value);
        
        // 在这里可以根据父/目标类名称进行验证逻辑的编写
        
        return true; // 返回验证结果
    }

    public function message()
    {
        return 'The validation error message.';
    }
}

在上述代码中,我们可以根据$parentTarget变量的值进行验证逻辑的编写,例如判断父/目标类是否符合特定的条件。

接下来,我们可以在使用该验证规则的地方进行调用。假设我们有一个表单请求类MyRequest,其中有一个字段target需要使用该验证规则进行验证。我们可以在rules方法中添加如下代码:

代码语言:txt
复制
public function rules()
{
    return [
        'target' => ['required', new ParentTargetRule],
    ];
}

在上述代码中,我们将ParentTargetRule作为验证规则的一个元素添加到target字段的验证规则中。

这样,当我们使用MyRequest类进行表单验证时,Laravel会自动调用ParentTargetRule类的passes方法进行验证,并根据返回的结果判断验证是否通过。

关于Laravel的更多信息和使用方法,可以参考腾讯云的Laravel产品介绍

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

通过 Laravel 表单请求实现字段验证和错误提示

在上一篇教程,我们已经演示了如何在控制器方法对表单请求字段进行验证,并且提到如果请求字段很多很复杂,都写到控制器方法里面会导致控制器臃肿,从单一职责原则来说需要将表单请求验证拆分出去,然后通过类型提示的方式注入到控制器方法...今天,我们就来实现这个拆分,Laravel 提供了表单请求的功能帮助我们快速完成这一架构调整。...,现在我们将其调整为返回 true 即可,然后我们在 rules() 方法定义请求字段验证规则,比如我们可以将上一篇教程的字段验证规则移到该方法: public function rules()...既然是在,自然可以通过方法来实现,我们只需重写的 messages() 方法即可: public function messages() { return [ 'title.required...$request) { return response('表单验证通过'); } Laravel 底层在解析这个控制器方法的参数时,如果发现这个请求是一个表单请求,则会自动执行其中定义的字段验证规则请求字段进行验证

3.9K30

通过匿名函数和验证规则自定义 Laravel 字段验证规则

Laravel 验证器的强大之处不仅在于提供前面提到的多种请求验证方式,以及非常丰富的字段验证规则(不同规则可以组合形成新的验证规则),从 5.5 版本开始,还支持自定义字段验证规则。...通过匿名函数实现自定义规则 我们先演示下如何在控制器方法调用 $this->validate() 时自定义验证规则,以 title 字段为例,除了系统提供的字段验证规则之外,有时候我们还会禁止用户输入包含敏感词的字段...如果你使用的是 Validator::make 进行请求字段验证的话,实现方式完全一样,不再赘述,即使是在表单请求 SubmitFormRequest ,也是一样的,把代码迁移过去就好了: public...,由于我们这个规则是通用的,所以将字段名通过 :attribute 动态注入: public function message() { return ':attribute输入字段包含敏感词...url' => 'sometimes|url|max:200', 'picture' => 'nullable|string', ]; } 此外,再抛一个知识点,我们可以在表单请求通过重写

2.9K20
  • 让LaravelLumen队列消费Non-Laravel queue job

    小伙伴们应该都清楚在Laravel的队列体系,是把实现了你的Job进行序列化之后在队列传输,消费者一方通过反序列化恢复对象,所以在Job我们可以完整传递信息,Eloquent\Model 等...网上就有人问:“我的生产者是NodeJS,消费者是Laravel。。。不知道该怎么办。”...解决办法 Illuminate\Queue\Jobs\Job的fire方法一直往下跟,你就会得到答案: /** * Fire the job....explode('@', $callback, 2) : [$callback, $default]; } 解释 假设我想在队列传输数据,指定消费者为App\Jobs\GatewayJob的...真实传输的数据 在回到我们之前make好的GatewayJob中看: /** * @param RabbitMQJob $job Job本身(这里是RabbitMQJob的子类实现)

    2.6K30

    php基础(一)

    static 静态方法,是的成员方法,但不需要实例化可直接使用 $GLOBAL 在函数内使用具有全局作用域的变量,$GLOBAL['a'] 2.子类重写的 protected 方法有什么限制?...或者说有什么要遵守的规则?...用例子说明,以 Laravel 框架的控制器作为说明 ①final修饰的方法不可被子类重写 ②PHP是否重写方法只会根据方法名是否一致判断(5.3以后重写方法参数个数必须一致) ③重写时访问级别只可以等于或者宽松于...CGI,通用网关接口,用于WEB服务器和应用程序间的交互,定义输入输出规范,用户的请求通过WEB服务器转发给FastCGI进程,FastCGI进程再调用应用程序进行处理,php解析器,应用程序的处理结果如...单例模式,观察者模式等等 单例模式 10.写一段代码,实现PHP内部的通知机制,当一个的属性发生变化时,另外一个就可以收到通知。 观察者模式的应用,使用代码示例说明。

    2.1K20

    Laravel的生命周期

    请求初始化,即初始化本次执行脚本所需要的变量名称和变量值,$_SESSION,$_COOKIE等 执行该php脚本 请求处理完成,按顺序调用各个模块的shutdown方法,并对每个变量进行unset(...现在我们知道了,每次请求之后php的变量都会unset(),laravel的singleton只是在某一次请求singleton,在php的静态变量也不能在多个请求之间共享,不像Java静态变量拥有全局作用...,拿到用户请求的报文信息;还是HttpKernel这个文件,$kernel->handle()拿到用户的请求数据后,返回一个响应实例。...Illuminate\Routing\Router完成了,查找到对应的路由实例,并运行路由实例的控制器或者匿名函数(最终运行routers\web.php配置匹配到的控制器或匿名函数)。...发送响应由 Illuminate\Http\Response  Symfony\Component\HttpFoundation\Response 的 send() 方法完成。

    1.6K10

    PHP-web框架Laravel-实现请求过滤(一)

    Laravel框架,可以通过请求过滤器来过滤应用程序的输入。请求过滤器可以用于验证输入、处理重定向、限制访问等等。本文将详细介绍如何在Laravel框架实现请求过滤。...一、请求过滤器的定义在Laravel框架,可以通过继承Illuminate\Foundation\Http\FormRequest来定义请求过滤器。...在这个,可以定义请求的验证规则、错误消息等等。下面是一个简单的请求过滤器示例:<?...authorize方法返回true,表示任何人都可以使用这个请求过滤器。rules方法定义了请求的验证规则,即标题和内容都是必须的,标题不能超过255个字符。...messages方法定义了验证规则的错误消息。

    1.3K20

    laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例

    前端为了更好的体验,都使用ajax进行表单提交,虽然 validate() 方法能够根据前端的不同请求方式,返回不同的结果。...先创建一个表单请求: php artisan make:request TestRequest 然后在 rules() 和 messages() 方法里填写自已的验证规则和消息 <?...) { return [ 'name.required' = '姓名必填', 'pwd.required' = '密码必填', ]; } } 注意,...FormRequest的 failedValidation() 方法用来处理验证失败,我们重写方法,来实现自已的返回。...更多关于Laravel相关内容感兴趣的读者可查看本站专题:《Laravel框架入门与进阶教程》、《php优秀开发框架总结》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及

    3.4K41

    Laravel框架关键技术解析

    和常量,根据当前导入的命名空间进行转换 在命名空间内部,所有的没有根据导入规则转换的非限定名称和非完全限定名称均会在其前面加上当前命名空间名称 在命名空间内部,对非限定名称和非限定 名称的函数进行调用时...3.Laravel框架的应用:大量使用,如在服务提供者注册过程,通过将服务名称与提供服务的匿名函数进行绑定,在使用时可以实现动态服务解析。...,query()方法(new static)->newQuery(); F.Laravel中使用的其他新特性 1.trait 优先级:当前的方法会覆盖trait的方法,trait的方法会覆盖基的方法.../控制器方法名/路由参数”,/home/index/xiaoming,会找到HomeController的getIndex($name)方法,anyIndex可以不限制请求方式,驼峰名方法getHomeIndex....Laravel框架还实现了一种依赖注入的方式进行服务解析,服务名称必须为服务生成的实例对象的名称或接口名称,通过服务容器创建的的构造函数可以通过依赖注入的方式解决依赖问题,对于方法也是一样 B.服务提供者

    11.9K20

    Laravel源码解析之Console内核

    上一篇文章我们介绍了Laravel的HTTP内核,详细概述了网络请求从进入应用到应用处理完请求返回HTTP响应整个生命周期中HTTP内核是如何调动Laravel各个核心组件来完成任务的。...try { //通过命令名称查找出命令(命名空间、名等) $command = $this->find($name); }...return $exitcode; } } 执行命令时主要有三步操作: 通过命令行输入解析出命令名称和参数选项。 通过命令名称查找命令的命名空间和名。...还有就是打开命令后我们可以看到并没有run方法,我们把处理逻辑都写在了 handle方法,仔细查看代码会发现 run方法定义在,在 run方法会中会调用子类定义的 handle方法来完成任务处理...Laravel定义的各种命令程序,然后在命令里面我们就可以写其他程序一样自由地使用Laravel的各个组件和注册到服务容器里的服务了。

    1.8K20

    Laravel优雅的验证日期需要大于今天

    正确的方法是这样的 Laravel 重写的prepareForValidation方法,之后再测试 Laravel 这时候得到想要的验证了 分析一下过程 能通过依赖注入实例化我们想要的对象...里有关表单验证的服务提供者 Laravel Laravel Laravel 我们可以看到当实现ValidatesWhenResolved对象的在解析之后会自动调用...validate方法 回到新建的IndexTicketRequest,没有这个方法,去到,发现实现了ValidatesWhenResolved,而validate是在trait的ValidatesWhenResolvedTrait...curr_date,我们来看看新建验证实例便知道答案 Laravel Laravel 这里有一个地方导致我们的问题出现,就是先调用了$this->validationData...经网友指点,已经修改使用after_or_equal:today,因为today这个关键字在PHP的strtotime是合法的关键字,可以成功转换

    29110

    Laravel源码解析之中间件

    中间件(Middleware)在Laravel起着过滤进入应用的HTTP请求对象(Request)和完善离开应用的HTTP响应对象(Reponse)的作用, 而且可以通过应用多个中间件来层层过滤请求、...(laravel5.5开始CSRF中间件只自动应用到web路由上) 上面例子过滤请求的叫前置中间件,完善响应的叫做后置中间件。用一张图可以标示整个流程 ?...下面我们主要来看一下Laravel是怎么实现中间件的,中间件的设计应用了一种叫做装饰器的设计模式,如果你还不知道什么是装饰器模式可以查阅设计模式相关的书,也可以翻看我之前的文章装饰模式(DecoratorPattern...Laravel实例化Application后,会从服务容器里解析出Http Kernel对象,通过的名字也能看出来Http Kernel就是Laravel里负责HTTP请求和响应的核心。...Laravel通过Pipeline(管道)对象来传输请求对象,在Pipeline请求对象依次通过Http Kernel里定义的中间件的前置操作到达控制器的某个action或者直接闭包处理得到响应对象。

    1.4K30

    深入理解 Laravel 管道

    基本上,你可以使用 laravel 管道(pipelines)基于链式操作将对象传入多个执行任何类型的任务,并在所有「任务」执行完成后一次性返回最终结果。...中间件提供一种方便的机制来过滤发送到应用的 HTTP 请求... 下面是一个基本的中间件示例: <?...如果你快速浏览过 Illuminate\Foundation\Http\Kernel ,你会看到中间件是如何在 Pipeline 对象中被执行的。...下面是你需要做的事情: 替换文本的 link 标签。 使用「*」替换掉敏感词。 移除文本的 script 标签。 也许最终你会构建相关的来处理这些「任务」。...但是值得高兴的是在你的知识库在需要的时候已经建立了管道这个新的武器的知识。 我希望这个实例能够让你对「Laravel Pipelines」有更深的了解,并知道如何使用它们。

    3.3K20

    Laravel学习记录--Model

    :中间模型 firstKey:中间模型与当前模型的外键,如果不指定,在本例按照默认拼接规则为 当前模型名_id;这里就是(Countrie_id)secondKey:中间模型与关联模型的关联外键...,如果不指定,在本例按照默认拼接规则为关联模型_id;这里就为user_id localKey:默认当前模型的主键IDsecondLocalKey:默认中间模型的主键ID 在Countrie模型中使用...$name:关联的名称,在定义数据库迁移时通过morphs指定的名称一致 $table:中间表名称,默认为$name的复数形式 $foreignPivotKey:当前模型在中间表的外键,默认拼接规则为”...$name:关联的名称,在定义数据库迁移时通过morphs指定的名称一致 $table:中间表名称,默认为$name的复数形式 $foreignPivotKey:关联模型在中间表的外键,默认拼接规则为”...你要自动使模型Post时间更新,要实现这一概念只需在子模型加一个包含关联名称(对应关联方法的名称)的touches属性即可,支持添加多个关联关系 : <?

    13.6K20

    在Swoole上使用双容器策略实现请求隔离的依赖注入

    简单来说, 容器通过反射机制可获取目标方法的依赖 ( laravel 用反射来获取 typehint 类型约束, 而 Swoft项目似乎与spring 相似, 是从注释上获取的)...., 类似 laravel 的 serviceProvider 分两处注册. // 在worker中注册的服务, 多个请求共享 'processProviders' => [ // 基础组件加载..., 才通过来做实例化....所以直接使用了 Laravel 的 Application 做 “进程级容器”, 确保自己请求中用到的核心业务逻辑都不注册到 laravel, 避免污染....就我发现, 最容易导致内存泄露的两种情况: 某个闭包在每次请求时生成一个闭包实例, 被每个容器持有 容器生成的某个服务是匿名, 导致相互持有 简单来说, 就是定义闭包和匿名时, 慎重考虑内存泄露的可能性就行

    1.5K30

    为什么 Laravel 这么优秀?

    会自动同步所有的数据库迁移文件并按照 Laravel Factory 定义的规则生成一个关系完备的测试数据。...会自动帮我们注册 5 条路由如下所示,包括用于新增操作的 POST 请求,用于删除的 DELETE 请求等: file Laravel 路由虽然是非常优秀的设计,但它却不是最高效的设计。...而 Laravel 提供的 FormRequest 就可以非常方便的做到这一点;你可以在 FormRequest 定义前端传入的每一个字段的验证规则。...在 PSR2 代码规范,还有专门的 Laravel 格式化风格。 写了这么久的代码,我不知道我写的代码到底够不够好,但好在是能嗅到一点点坏代码的味道了,而这一切都全部得益于 Laravel。...而 Laravel Pipeline 的实现也很有趣;我们知道在常见的 Pipeline 设计,大多会通过 for 循环来实现,而 Laravel 则采用的是最简单却又最复杂的实现 array_reduce

    22410

    Laravel框架的核心架构,你懂多少?

    使用过larave框架的朋友都知道laravel框架里面除了提供一些基本的功能(控制器、视图、模型)之外,还有中间件、门面、契约等,这些东西是如何在laravel框架运用起来的呢?...分层设计:把相同功能的库放在同一个文件夹里面。 laravel框架有多个组成服务,由多个服务组成组件。... -> 服务 -> 组件 laravel使用组件化的开发模式,多个 -> 服务 -> 组件,多个组成服务,多个服务构成组件。 多个组件提供不同的服务,然后多个服务构成我们的项目。...请求生命周期 大概的流程如图: ?...事件:laravel里面的模型里面的事件,比如用户对数据库操作时做的一个监听。对整个项目运行进行监听,有监听的动作。类似tp5里面的钩子和行为。 中间件:做用户的请求做一定的过滤。

    2.9K20

    Laravel框架的核心架构,你懂多少?

    使用过larave框架的朋友都知道laravel框架里面除了提供一些基本的功能(控制器、视图、模型)之外,还有中间件、门面、契约等,这些东西是如何在laravel框架运用起来的呢?...分层设计:把相同功能的库放在同一个文件夹里面。 laravel框架有多个组成服务,由多个服务组成组件。... -> 服务 -> 组件 laravel使用组件化的开发模式,多个 -> 服务 -> 组件,多个组成服务,多个服务构成组件。 多个组件提供不同的服务,然后多个服务构成我们的项目。...于是laravel里面就出现了门面,门面的出现方便我们优雅的调用服务器提供者的。...事件:laravel里面的模型里面的事件,比如用户对数据库操作时做的一个监听。对整个项目运行进行监听,有监听的动作。类似tp5里面的钩子和行为。 中间件:做用户的请求做一定的过滤。

    3K10
    领券