webman自定义请求对象,控制器如何调用

wadeYang

看文档
基础功能-请求-自定义请求对象
1、新建 app/Request.php
2、在 config/server.php 中增加配置

没有自定义之前是这样用

use support\Request;
class Index
{
    public function index(Request $request)
    {
        return response('hello webman');
    }
}

自定义app/Request.php后,控制器如何用??,请教一下各位

1418 4 0
4个回答

admin

use app \Request;
即可,因为会自动注入

public function index(app\Request $request)

  • 暂无评论
nitron
TypeError: app\controller\User::hello2(): Argument #1 ($request) must be of type app\controller\app\Request, support\Request given

你引用的Request错了,提示很明显了 app\controller\app\Request

把hello2(app\Request $req)改成hello2(Request $req)
  • 暂无评论
wadeYang

已经解决该问题,文档有误。正确操作如下

1、新建app/MyRequest.php,为了明显区别系统体提供的support\Request类,我换了个名字MyRequest

<?php
namespace app;

class MyRequest extends \support\Request
{
    public function get($name = null, $default = null)
    {
        var_dump(222);
        return $this->filter(parent::get($name, $default));
    }

    public function post($name = null, $default = null)
    {
        return $this->filter(parent::post($name, $default));
    }

    public function filter($value)
    {
        if (!$value) {
            return $value;
        }
        if (is_array($value)) {
            array_walk_recursive($value, function(&$item){
                if (is_string($item)) {
                    $item = htmlspecialchars($item);
                }
            });
        } else {
            $value = htmlspecialchars($value);
        }
        return $value;
    }
}

2、在 config/app.php 中增加如下配置。(文档说的是在config/server.php增加,此处错误)

return [
    // ... 这里省略了其它配置 ...
    'request_class' => app\MyRequest::class, //注意这里是,一定要引入第一步新增的类
];

3、控制器中使用

<?php
namespace app\controller;

// use support\Request;
use app\MyRequest;

class User
{
    public function hello2(MyRequest $request)
    {

        $default_name = 'webman';
        var_dump(111);
        $name =  $request->get('name', $default_name);
        return view('user/hello', ['name' => $name]);
    }

}
  • 暂无评论
静默

文档没问题,使用的时候 use support\Request; 改成 use app\Request; 就行了,命名空间是php基础了

use app\Request;
class Index
{
    public function index(Request $request)
    {
        return response('hello webman');
    }
}
  • 暂无评论
年代过于久远,无法发表回答
🔝