我可能误解了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.
也许我对路线不够好,但这真的令人沮丧。
提前谢谢你!
答案 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]) }}