- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试制作一个 crud Controller 基础,从那里我扩展它并设置模型基础,然后我有一些基本的 crud 方法。我得到了所有动态工作。但是我不能创建动态请求类型,为了验证它,我有 ChannelRequest,它工作正常,如下所示,但我希望它是动态的:
这是我的 CrudController 类(我将扩展并设置一个模型):
public function store(ChannelRequest $request)
{
$this->save($request); // this method get the model instantiated in parent class and save the inputs
return redirect('admin/' . $this->plural);
}
在上面的这个例子中,我硬编码了依赖注入(inject)的请求类型,然后它验证了,但我想动态地改变请求类型,像这样:
// i know it not being work
public function store($this->model .'Request' $request)
{
$this->save($request);
return redirect('admin/' . $this->plural);
}
我试过这个:
public function store()
{
$request = new ChannelRequest();
$request->validate(); //hopping it runs like when dependency injection
$this->save($request);
return redirect('admin/' . $this->plural);
}
这让我犯了一个错误:
FatalErrorException in FormRequest.php line 75:
Call to a member function make() on null
in FormRequest.php line 75
at FatalErrorException->__construct() in HandleExceptions.php line 133
at HandleExceptions->fatalExceptionFromError() in HandleExceptions.php line 118
at HandleExceptions->handleShutdown() in HandleExceptions.php line 0
at FormRequest->getValidatorInstance() in ValidatesWhenResolvedTrait.php line 20
at FormRequest->validate() in CrudController.php line 67
最佳答案
首先,我想强调的是,为每个资源(模型)设置单独的 Controller 是一种很好的做法,可以防止单独的关注点过于混杂。使用动态请求类首先违背了显式定义请求类的目的。
但是,为了尽我所能回答这个问题,我会给你一个如何解决这个问题的想法。此代码未经测试,但概念应该是合理的。
我在这里所做的是使用 SmartRequest 类扩展标准 Request 类并覆盖 __construct
以允许我为给定请求类型的正确请求类运行预加载器。
这将允许您定义单独的请求类,然后根据 resourceType
请求参数(这可以是POST、GET 或 URL 参数的一部分,如果你想为最后一个修改一些代码)。
代码:App\Http\Requests\SmartRequest
<?php
use App\Http\Requests\Request;
class SmartRequest extends Request {
/**
* Holds sub request class
* @var Request
*/
protected $subRequest;
/**
* Default constructor
* @param array $query
* @param array $request
* @param array $attributes
* @param array $cookies
* @param array $files
* @param array $server
* @param string|resource $content
*/
public function __construct(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null)
{
// make sure standard constructor fires
parent::__construct($query, $request, $attributes, $cookies, $files, $server, $content);
// instantiate the sub request object, we must also pass through all the data for the base
// request since the sub class requires this data.
$this->loadSubRequest($query, $request, $attributes, $cookies, $files, $server, $content);
}
/**
* Default constructor
* @param array $query
* @param array $request
* @param array $attributes
* @param array $cookies
* @param array $files
* @param array $server
* @param string|resource $content
*/
public function loadSubRequest($query, $request, $attributes, $cookies, $files, $server, $content)
{
// get resource type off the request data to generate the class string
$class = $this->getRequestClassName();
$this->subRequest = new $class($query, $request, $attributes, $cookies, $files, $server, $content);
}
/**
* Get the sub class name with namespace
* @return string
*/
public function getRequestClass()
{
return '\<path>\<to\<namespace>\\' . studly_case($this->resourceType) . 'Request';
}
/**
* Returns rules based on subclass, otherwise returns default rules
* @return array
*/
public function rules()
{
// return the default rules if we have no sub class
if (empty($this->subRequest)) return [];
// return the rules given by the sub class
return $this->subRequest()->rules();
}
}
同样,这不是真正的代码(因为我没有测试过)但这可能是完成您的请求的一种方式。这也依赖于在请求中发送了一些标识符(在这种情况下,一个 requestType
参数),因为除了请求发送到哪里以及使用什么参数之外,你不会知道任何关于请求的信息。
不过,我认为这完全违背了该功能的初衷。有明确的请求并在需要它们的方法中明确地使用它们要好得多。为什么?自记录代码。只需阅读操作中的 ChannelRequest $request
之类的内容,人们就会知道您在哪里使用什么。上面的内容 (SmartRequest
) 会导致某种魔法发生,任何其他开发人员在撕开 SmartRequest
类之前都无法理解。
如果这让我感到困惑,或者如果您对为什么我认为这种方法是朝着错误方向迈出的一步有任何其他疑问,请告诉我。
关于php - 如何在 Laravel 5.1 上使请求类型动态化(验证),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31887841/
在 JSF2 应用程序中遇到验证属性的问题时,有两种主要方法。 使用 Annotation 在 ManagedBean 上定义验证 @ManagedBean public class MyBean {
我想实现一个不常见的功能,我认为 jquery 验证插件将是最好的方法(如果您在没有插件的情况下建议和回答,我们也会欢迎)。我想在用户在输入字段中输入正确的单词后立即隐藏表单。我试过这个: $("
我有几个下拉菜单(类名为month_dropdown),并且下拉菜单的数量不是恒定的。我怎样才能为它们实现 NotEqual 验证。我正在使用 jQuery 验证插件。 这就是我写的 - jQuery
我设法制作了这个网址验证代码并且它起作用了。但我面临着一个问题。我认为 stackoverflow 是获得解决方案的最佳场所。 function url_followers(){ var url=do
我目前正在使用后端服务,该服务允许用户在客户端应用程序上使用 Google Games 库登录。 用户可以通过他们的 gplay ID 向我们发送信息,以便登录或恢复旧帐户。用户向我们发送以下内容,包
我正在尝试验证输入以查看它是否是有效的 IP 地址(可能是部分地址)。 可接受的输入:172、172.112、172.112.113、172.112.113.114 Not Acceptable 输入
我从 Mongoose 验证中得到这条消息: 'Validator failed for path phone with value ``' 这不应该发生,因为不需要电话。 这是我的模型架构: var
我一直在尝试使用Python-LDAP (版本 2.4.19)在 MacOS X 10.9.5 和 Python 2.7.9 下 我想在调用 .start_tls_s() 后验证与给定 LDAP 服务
我正在处理一个仅与 IE6 兼容的旧 javascript 项目(抱歉...),我想仅在 VS 2017 中禁用此项目的 ESLint/CSLint/Javascript 验证/CSS 验证。 我知道
我正在寻找一种方法来验证 Spring 命令 bean 中的 java.lang.Double 字段的最大值和最小值(一个值必须位于给定的值范围之间),例如, public final class W
我正在尝试在 springfuse(JavaEE 6 + Spring Framework (针对 Jetty、Tomcat、JBoss 等)) 和 maven 的帮助下构建我的 webapps 工作
我试图在我们的项目中使用 scalaz 验证,但遇到了以下情况: def rate(username: String, params: Map[String, String]): Validation
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
我有一个表单,人们可以单击并向表单添加字段,并且我需要让它在单击时验证这些字段中的值。 假设我单击它两次并获取 2 个独立的字段集,我需要旋转 % 以确保它在保存时等于 100。 我已放入此函数以使其
在我的页面中有一个选项可以创建新的日期字段输入框。用户可以根据需要创建尽可能多的“截止日期”和“起始日期”框。就像, 日期_to1 || date_from1 日期到2 ||日期_from2 date
我有一个像这样的 Yaml 文件 name: hhh_aaa_bbb arguments: - !argument name: inputsss des
有没有办法在动态字段上使用 jquery 验证表单。 我想将其设置为必填字段 我正在使用 Jsp 动态创建表单字段。 喜欢 等等...... 我想使用必需的表单字段验证此表单字段。 最佳答
嗨,任何人都可以通过提供 JavaScript 代码来帮助我验证用户名文本框不应包含数字,它只能包含一个字符。 最佳答案 使用正则表达式: (\d)+ 如果找到匹配项,则字符串中就有一个数字。 关于J
我有两个输入字段holidayDate和Description(id=tags) $(document).ready(function() {
我遇到了这个问题,这些验证从电子邮件验证部分开始就停止工作。 我只是不明白为什么即使经过几天的观察,只是想知道是否有人可以在这里指出我的错误? Javascript部分: function valid
我是一名优秀的程序员,十分优秀!