2013-07-06 43 views
9

Mẫu:MethodNotAllowedHttpException laravel-4

{{ Form::open(array('url' => 'user/create', 'files' => true)) }} 

Route:

Route::resource('user', 'UserController'); 

UserController.php

class UserController extends BaseController { 

    public function index() 
    { 
     return 'hi11'; 
     //return View::make('home.index'); 
    } 
    public function create() 
    { 
     return 'hi22'; 
     //return View::make('home.index'); 
    } 

} 

Mã này mang đến cho
Symfony \ Component \ HttpKernel \ Exception \ MethodNotAllowedHttpException

+0

lý do bạn muốn sử dụng phương pháp tạo? Bộ điều khiển tài nguyên có nghĩa là để giảm bớt công việc của bạn bằng cách xác định các hàm curd phổ biến. –

+0

Phương pháp này tôi muốn sử dụng chèn người dùng vào cơ sở dữ liệu. – bigData

+0

cho rằng phương pháp lưu trữ chỉ được tạo ra bởi bộ điều khiển tài nguyên –

Trả lời

3

Bởi vì trong roures của bạn, bạn sử dụng bộ điều khiển resourse, bạn có thể sử dụng đường dẫn chỉ cụ thể và hành động, được mô tả trong tài liệu hướng dẫn http://laravel.com/docs/controllers#resource-controllers.

người dùng/tạo (UserController :: create) là nơi bạn cần hiển thị biểu mẫu để thêm người dùng mới.

Bộ nhớ thực của người dùng phải được thực hiện trong người dùng/cửa hàng tức là biểu mẫu của bạn phải gửi dữ liệu đến phương thức UserController :: store().

Trong trường hợp của bạn nếu bạn chỉ đăng biểu mẫu của mình lên 'url' => 'người dùng', điều này sẽ tự động gửi dữ liệu đến đúng phương pháp.

13

Tôi chỉ muốn thêm khám phá của riêng mình dọc theo những dòng này ... Có lẽ điều này sẽ giúp người khác làm xước đầu tôi vừa mới thực hiện.

Tôi cũng đã triển khai cơ chế Tuyến đường :: tài nguyên. Tôi không thể tìm ra lý do tại sao tạo của tôi đã hoạt động nhưng bản cập nhật của tôi thì không. Hóa ra bạn không thể sử dụng lại chính xác cùng một mã biểu mẫu, biểu mẫu cập nhật phải sử dụng phương thức PUT hoặc PATCH. Tại sao cập nhật không thể là POST được vượt ra ngoài tôi.

Đó là để nói, toàn bộ thẻ form khai mạc cho một bản cập nhật phải trông như thế này:

Form::model($thing, array(
    'method' => 'PUT', 
    'route' => array('things.update', $thing->id) 
    ) 

Nếu không có quy định cụ thể phương pháp => PUT, bạn nhận được lỗi không-hữu ích này.

+0

Thực sự là một "lỗi" gây phiền nhiễu. Công cụ Chrome Dev và LiveHTTP Headers đều không thể hiển thị sự cố. Cảm ơn! – Heroselohim

0

đây là cách tôi đang thực hiện, nó có thể giúp ai đó, có thể được cải thiện, nhưng đây sẽ là ý tưởng chính.

@if(isset($data)) 
    {{ Form::open(['route'=>['blog.update', isset($data) ? $data->slug : null],'method' => 'patch','role' => 'form', 'class' => 'blog-form form-horizontal']) }} 
@else 
    {{ Form::open(['route'=>'blog.store','role' => 'form', 'class' => 'blog-form form-horizontal']) }} 
@endif