加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – Laravel表单请求:调用坏方法

发布时间:2020-12-14 19:37:04 所属栏目:大数据 来源:网络整理
导读:当我使用带有Post方法的Form Request时,响应是“index()”方法响应.但它必须是“store(myRequest $request)”方法. 如果我从“store()”中删除myRequest $request方法,它就可以了.我迷路了.请帮帮我. 我的控制器: ?php namespace AppHttpControllersRess
当我使用带有Post方法的Form Request时,响应是“index()”方法响应.但它必须是“store(myRequest $request)”方法.
如果我从“store()”中删除myRequest $request方法,它就可以了.我迷路了.请帮帮我.

我的控制器:

<?php namespace AppHttpControllersRessource;

use AppHttpRequestsCreateCollectionRequest;
use AppRepositoriesCollectionRepository;

class CollectionController extends RessourceController {

    private $collectionRepository;

    public function __construct(CollectionRepository $collectionRepository)
    {
        parent::__construct();
        $this->collectionRepository = $collectionRepository;
    }

    public function index()
    {
        return $this->run( function()
        {
            return $this->collectionRepository->all()->get();
        });
    }

    public function store(CreateCollectionRequest $request)
    {
        return $this->run( function() use ($request) {
        return $this->collectionRepository->create($request->all());
        });
    }
}

RessourceController:

<?php namespace AppHttpControllersRessource;

use IlluminateSupportFacadesResponse;
use AppHttpControllersController;

abstract class RessourceController extends Controller
{
    protected $result = null;

    public function __construct()
    {
        $this->result = new stdClass();
        $this->result->error = 0;
        $this->result->message = '';
        $this->result->service = $this->getService();
        $this->result->data = null;
    }

    abstract public function getService();

    protected function render()
    {
        return Response::json($this->result);
    }

    public function missingMethod($parameters = [])
    {
        $this->result->err = 404;
        $this->result->message = 'Service ' . $this->getService() . ' : ' . $parameters . ' non disponible';
        return $this->render();
    }

    protected function run($function)
    {
        try {
            $this->result->data = call_user_func($function);
        } catch (Exception $e) {
            $this->result->err = ($e->getCode() > 0) ? $e->getCode() : -1;
            $this->result->message = $e->getMessage();
        }

        return $this->render();
    }
}

自定义表格请求:
????

namespace AppHttpRequests;

use AppHttpRequestsRequest;

class CreateCollectionRequest extends Request
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'label' => 'required|alpha_num|min:3|max:32','description' => 'alpha_dash|max:65000','parent_collection_id' => 'exists:collections,id'
        ];
    }
}

从routes.php中提取:

Route::group(array('namespace' => 'Ressource','prefix' => 'ressource'),function () {
    Route::resource('collection','CollectionController',['only' => ['index','show','store','update','destroy']]);
});

邮差要求:

Postman request

邮差响应:

Postman reponse

解决方法

你应该让你的功能成为Clouse功能.
我的控制器:

use AppHttpRequestsCreateCollectionRequest;
use AppRepositoriesCollectionRepository;
use SuperClosureSerializer;
use IlluminateSupportStr;
use Closure;

class CollectionController extends RessourceController {

private $collectionRepository;

public function __construct(CollectionRepository $collectionRepository)
{
    parent::__construct();
    $this->collectionRepository = $collectionRepository;
}

public function index()
{
    return $this->run( function()
    {
        return $this->collectionRepository->all()->get();
    });
}
protected function buildCallable($callback) {
 if (! $callback instanceof Closure) {
    return $callback;
 }
 return (new Serializer)->serialize($callback);
}
public function store(CreateCollectionRequest $request)
{
    $callback = function() use ($request) {
      return $this->collectionRepository->create($request->all());
    }
    return $this->run($this->buildCallable($callback));
}

}

RessourceController:

<?php namespace AppHttpControllersRessource;

 use IlluminateSupportFacadesResponse;
 use AppHttpControllersController;
 use SuperClosureSerializer;
 use IlluminateSupportStr;
 use Closure;

abstract class RessourceController extends Controller
{
protected $result = null;

public function __construct()
{
    $this->result = new stdClass();
    $this->result->error = 0;
    $this->result->message = '';
    $this->result->service = $this->getService();
    $this->result->data = null;
}

abstract public function getService();

protected function render()
{
    return Response::json($this->result);
}

public function missingMethod($parameters = [])
{
    $this->result->err = 404;
    $this->result->message = 'Service ' . $this->getService() . ' : ' . $parameters . ' non disponible';
    return $this->render();
}
protected function getCallable($callback)
{
    if (Str::contains($callback,'SerializableClosure')) {
        return unserialize($callback)->getClosure();
    }

    return $callback;
}
protected function run($function)
{
    try {
        $this->result->data = call_user_func($this->getCallable($function));
    } catch (Exception $e) {
        $this->result->err = ($e->getCode() > 0) ? $e->getCode() : -1;
        $this->result->message = $e->getMessage();
    }
    return $this->render();
}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读