2014-04-06 7 views
1

У меня есть две разные формы, которые должны использовать один контроллер. Я создал этот контроллер в качестве контроллера ресурсов, используя следующий метод в routes.php:Laravel - расширение ResourceController

Route::resource('account', 'AccountController'); 

В первой форме я использую

{{ Form::model($user, array('route' => array('account.update', $user->id), 'method' => 'PUT', 'class' => 'form-outside', 'files' => true)) }} 

Поскольку контроллер ресурсов знает функцию обновления это хорошо работает.

Однако я хочу создать вторую форму, относящуюся к учетной записи и обновляющую другие разделы профиля пользователя. Теперь я хочу расширить контроллер с помощью функции «updateSettings».

Но как я могу это сделать? Я создал функцию в AccountController и использовать следующее во второй форме:

{{ Form::model($user, array('action' => array('AccountControl[email protected]', $user->id), 'method' => 'PUT', 'class' => 'form-outside')) }} 

Но Laravel выстреливает исключение,

Маршрут [AccountController @ updateSettings] не определено.

Как я могу расширить свой контроллер ресурсов, что updateSettings является допустимым методом? Или как я могу использовать формы привязки модели без контроллера ресурсов?

Спасибо!

ответ

0

Чтобы полностью расширить контроллер ресурсов, вам необходимо расширить класс Illuminate\Routing\Router и переопределить необходимые методы. Следующим шагом будет использование App::bind(), чтобы заменить старый класс Router новым, который вы напишете.

Более быстрый способ - использовать только новый маршрут, указав его уникальное имя, например, в вашем routes.php: App::put('updateSettings', '[email protected]'). Удачи.

0

Или как я могу использовать формы привязки модели без ресурса контроллер?

Таким образом, в этом случае вы можете связать модель с контроллера, на самом деле, вы можете вручную передать модель, например, если у вас есть Post модели и хотите отредактировать пост, то вы можете вручную загрузить модель от контроллера и передать его мнению, чтобы связать с формой, например:

class PostController extends BaseController { 

    //... 
    public function getEdit($id) 
    { 
     $post = Post::find($id); 
     return View::make('post.edit')->with('post', $post); 
    } 

    public function postUpdate($id) 
    { 
     //... 
    } 
} 

Тогда в вашем views/post/edit.blade.php вы можете использовать что-то вроде этого:

{{ Form::model($post, array('route' => array('post.update', $post->id))) }} 

Теперь вам нужно создать маршруты для этих методов, например:

Route::get('post/edit/{id}', array('as' => 'post.edit', 'uses' => '[email protected]')); 
Route::post('post/update/{id}', array('as' => 'post.update', 'uses' => '[email protected]')); 
Смежные вопросы