Laravel 5.8路线未定义,但显然是

时间:2019-05-11 15:10:15

标签: laravel routes laravel-5.8

在我发布此问题之前,它运行良好。 但是有一段时间,当我继续开发laravel项目时,我遇到了这个问题。

  

错误:路由[user / alamat / 2]未定义。

//Routes
//web.php
Route::get('user/alamat/{id}','UserTransaksiController@index')->name('user/alamat/{id}');


//Blade
<a href={{ route('user/alamat/'.Auth::user()->iduser) }} >

2 个答案:

答案 0 :(得分:0)

刀片中使用的路由功能用于路由名称。在命名路由时,您不能传递参数,可以将路由命名为user.alamat,而在刀片服务器模板中则可以使用route('user.alamat', auth()->id())

将参数作为数组传递到route('name', [$yourParameters])中。

Route::get('user/alamat/{id}','UserTransaksiController@index')->name('user.alamat');
<a href="{{ route('user.alamat', auth()->id()) }}" ></a>

<!-- OR -->

<a href="/user/alamat/{{ auth()->id() }}" ></a>

答案 1 :(得分:0)

我将逐步介绍您应该重构的内容。

首先,您应该重命名路线。名称方法应该是这样的。

Route::get('user/alamat/{id}','UserTransaksiController@index')->name('user.alamat');

然后,您可以在示例中使用相同的名称从应用程序中的任何地方引用路由,它应该像这样(注意如何调用参数):

<a href="{{ route('user.alamat', ['id' => auth()->user()->id]) }}" ></a>

这时应该解决错误,如果您想改善代码,可以进一步阅读。

返回您的路线对我来说,在路线中放置阿拉木图而在控制器上放置 Transaksi 对我来说是没有意义的。根据要检索的信息,它们应该保持一致以使代码可读。假设您正在检索 Transaksi ,我看到它翻译为 Deal ,所以您应该有类似的内容。

Route::get('users/{id}/transaksis','UserTransaksiController@index')->name('user.transaksi.index');

请注意,我更改了路线。 Route::get('user/{id}/transaksis'....读这部分内容的方式就像是要获取与用户相关的信息,然后是该特定用户的ID,然后是其他相关模型。使用相同的原理,名称应为...->name('user.transaksi.index')

我在名称上使用了 index ,因为您不能在同一控制器上使用更多方法,并且路由名称也应该保持可读性。

最后,您可以转到RouteServiceProvider,然后在引导方法中添加此内容。 Route::model('user', User::class);可以更改您的路线,如下所示:

Route::get('users/{user}/transaksis','UserTransaksiController@index')->name('user.transaksis.index');

这称为“路由模型绑定”,它使您可以像这样在控制器中获取整个模型:

public function index(User $user)
{
    //user should have the entire user model instance

    //if you have relations defined you can do this
    $user->transaksis;

    //the rest of your code to return goes here
}

考虑到User可以是任何其他模型,我以所有这些示例为例。如果要针对特定​​情况进行简化,则可以从控制器内部获取用户ID,而无需像这样将其作为参数传递:

public function index(Request $request)
{
    //Option 1 using the user from the request (you do not need to pass the request from the route, it is filled automatically by LAravel
    $request->user()->transaksis;

    //Option 2 using the auth helper
    auth()->user()->transaksis;

    //There are a lot of options to get the user

    //the rest of your code to return goes here
}