samedi 9 janvier 2016

Laravel Form Request : bad method be called

When I use a Form Request with a Post method the response is the "index()" method response. But it's have to be the "store(myRequest $request)" method. If I remove myRequest $request method from "store()" it's works. I'm lost.Please help me.

My controller :

<?php namespace App\Http\Controllers\Ressource;

use App\Http\Requests\CreateCollectionRequest;
use App\Repositories\CollectionRepository;

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 App\Http\Controllers\Ressource;

use Illuminate\Support\Facades\Response;
use App\Http\Controllers\Controller;

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();
    }
}

Custom Form Request :

namespace App\Http\Requests;

use App\Http\Requests\Request;

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'
        ];
    }
}

Extract from routes.php :

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

Postman request : Postman request

Postman reponse :

Postman reponse



via Chebli Mohamed

Aucun commentaire:

Enregistrer un commentaire