2013-06-06 3 views
1

Возможно, я не понимаю, как работает Laravel, или, может быть, я пропустил что-то в своих документах, которые я вылил, и для этого заранее извиняюсь.Пользовательские методы в контроллерах laravel 4

Допустим, я создаю новый контроллер с помощью Artisan

php artisan controller:make FooController --path /var/www/app/controllers/admin 

и я установил мои маршруты:

Route::group(array('prefix' => 'admin', 'before' => 'auth.admin'), function() 
{ 
    Route::any('/',   'App\Controllers\Admin\[email protected]'); 
    Route::resource('foo', 'App\Controllers\Admin\FooController'); 
} 

Тогда в моем контроллере я буду иметь методы для индекса(), создания() , update() и т. д. правильно?

Что делать, если мне нужен метод под названием activate() в моем FooController? Это может выглядеть следующим образом:

public function activate($id){ 
    return "activated"; 
} 

Теперь я поставил ссылку на мой index.blade.php файл

<a href="{{ URL::route('admin.foo.activate', $foo->id) }}">Activate</a> 

Почему это не работает? Я получаю:

Unable to generate a URL for the named route "admin.foo.activate" as such route does not exist.

Может быть, я не достаточно хорошо с маршрутами, но это действительно сложно.

благодарим вас заранее!

ответ

2

Вот как я решил это:

мне нужно пользователя Route :: получить

Route::get('admin/foo/activate/{id}', 'App\Controllers\Admin\[email protected]'); 

тогда моя связь, необходимую для пользователя пространства имен:

Url::action(App\Controllers\Admin\[email protected],$foo->id) 
0

Попробуйте

URL::action('[email protected]') 

вы пытаетесь пути к/администратора/Foo/активировать (для чего на самом деле нет никакого маршрута определяется). В противном случае вы можете также определить маршрут:

Route::controller('foo/activate/{id}', 'App\Controllers\Admin\[email protected]'); 

и работать с вашим решением, но я думаю, что первый вариант лучше.

+0

Ни работал. Первая опция вернула неизвестное действие. второй бросил класс, не существует исключение. Я знаю, что контроллер работает правильно, потому что, если я удалю @action из него, он будет загружать индекс. –

0

Это, возможно, немного если вы назовете маршрут в приложении/routes.php, то есть

Route::get('admin/foo/activate/{id}', [ 'as' => 'admin.foo.activate', 'uses' => 'App\Controllers\Admin\[email protected]']);

, то вы можете позвонить по

<a href="{{ URL::route('admin.foo.activate', $foo->id) }}">Activate</a>

или даже

{{ URL::link_to_route('admin.foo.activate', 'Activate', [$foo->id]) }}

Смежные вопросы