【问题标题】:Custom methods in laravel 4 controllerslaravel 4 控制器中的自定义方法
【发布时间】:2013-06-02 11:05:54
【问题描述】:

我可能误解了 Laravel 的工作原理,或者我在倾倒的大量文件中遗漏了一些东西,为此我提前道歉。

假设我使用 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\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.

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

提前谢谢你!

【问题讨论】:

    标签: php methods routes laravel-4 controllers


    【解决方案1】:

    试试

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

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

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

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

    【讨论】:

    • 都没有用。第一个选项返回未知操作。第二次抛出的类不存在异常。我知道控制器工作正常,因为如果我从中删除 @action,它将加载索引。
    【解决方案2】:

    我是这样解决的:

    我需要用户 Route::get

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

    那么我的链接需要使用命名空间:

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

    【讨论】:

      【解决方案3】:

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

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

      那你就可以打电话了

      &lt;a href="{{ URL::route('admin.foo.activate', $foo-&gt;id) }}"&gt;Activate&lt;/a&gt;

      甚至

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

      【讨论】:

        猜你喜欢
        • 2023-04-05
        • 1970-01-01
        • 2013-08-26
        • 2015-09-13
        • 2018-01-12
        • 1970-01-01
        • 1970-01-01
        • 2021-06-07
        • 2016-07-05
        相关资源
        最近更新 更多