laravel 4控制器中的自定义方法


Custom methods in laravel 4 controllers

我可能误解了Laravel的工作原理,或者我在大量的文档中遗漏了什么,为此我提前道歉。

假设我用artisan

创建一个新的控制器
php artisan controller:make FooController --path /var/www/app/controllers/admin

and I set my routes:

 Route::group(array('prefix' => 'admin', 'before' => 'auth.admin'), function()
 {
    Route::any('/',           'App'Controllers'Admin'IndexController@index');
    Route::resource('foo',    'App'Controllers'Admin'FooController');
 }

然后在控制器中,我有index() create() update()等方法?

如果我想在我的FooController中调用一个方法activate()该怎么办?它可以像这样:

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.

也许我对路线不够好,但这真的很令人沮丧。

提前感谢!

我是这样解决的:

我需要使用Route::get

Route::get('admin/foo/activate/{id}',    'App'Controllers'Admin'foo@activate');

然后我的链接需要使用命名空间:

Url::action(App'Controllers'Admin'Foo@activate,$foo->id)

Try

URL::action('admin.foo@activate')

你正在尝试路由到/admin/foo/activate(确实没有定义路由)。否则,你也可以定义一个路由:

Route::controller('foo/activate/{id}',    'App'Controllers'Admin'FooController@action');

和你的解决方案,但我认为第一个选项更好。

如果在app/routes.php中命名路由,可能会更简洁一些,即

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

则可以通过

调用

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

或者

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