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

时间:2013-06-06 12:29:19

标签: php methods routes laravel-4 controllers

我可能误解了Laravel是如何工作的,或者我错过了我倾倒的文件中的一些内容,为此我提前道歉。

假设我使用工匠

创建一个新的控制器
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\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.

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

提前谢谢你!

3 个答案:

答案 0 :(得分:2)

以下是我如何解决它:

我需要使用Route :: get

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

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

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

答案 1 :(得分:0)

尝试

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

您正尝试路由到/ admin / foo / activate(确实没有定义路由)。 否则,您还可以定义路线:

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

并使用您的解决方案,但我认为第一种选择更好。

答案 2 :(得分:0)

如果你在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]) }}