我有一个数组,其中每个部分都包含有关其状态和路径名称的信息:
$sections = array(
'Section_1' => array(
'status' => 1,
'route' => 'section1.route'
),
'Section_2' => array(
'status' => 0,
'route' => 'section2.route'
),
'Section_3' => array(
'status' => 1,
'route' => 'section3.route'
)
);
我试图遍历它以创建HTML列表。
我试过这个(1):
@foreach ($sections as $dataName => $details)
<li>
<a href="{{ URL::route($details['route']) }}">{{ $dataName }}</a>
</li>
@endforeach
这(2):
@foreach ($sections as $dataName => $details)
<li>
<?php $routeName = $details['route']; ?>
<a href="{{ URL::route($routeName) }}">{{{ $dataName }}}</a>
</li>
@endforeach
这个(3):
@foreach ($sections as $dataName => $details)
<li>
<?php $routeName = URL::route($details['route']); ?>
<a href="<?php echo $routeName; ?>">{{{ $dataName }}}</a>
</li>
@endforeach
以上所有内容都会产生同样的错误:
路线[]未定义。
InvalidArgumentException(&#34; Route [{$ name}]未定义。&#34;)
数组中的所有路由都存在 - 检查它们是否存在拼写错误等。我有一种感觉,这可能是微不足道的,但我不知道是什么。有什么想法吗?
PS。我知道我可以在数组中存储完整的路由,比如'route' => URL::route('section1.route')
等。但是上面的代码有什么问题?
编辑:示例路线
Route::get('user/show/section1',
array(
'before' => 'auth',
'uses' => 'UserController@showSection1',
'as' => 'section1.route'
)
);
我正在使用命名路线。
答案 0 :(得分:0)
好的,经过简单的测试,我创建了如下的模拟代码。
在我的路线上,我设置了这个:
Route::get('user/show/section1',
array(
'before' => 'auth',
'uses' => 'HomeController@showWelcome',
'as' => 'section1.route'
)
);
Route::get('user/show/section2',
array(
'before' => 'auth',
'uses' => 'HomeController@s2',
'as' => 'section2.route'
)
);
Route::get('user/show/section3',
array(
'before' => 'auth',
'uses' => 'HomeController@s2',
'as' => 'section3.route'
)
);
我控制器上的模拟方法:
public function showWelcome()
{
$sections = array(
'Section_1' => array(
'status' => 1,
'route' => 'section1.route'
),
'Section_2' => array(
'status' => 0,
'route' => 'section2.route'
),
'Section_3' => array(
'status' => 1,
'route' => 'section3.route'
)
);
return View::make('hello')->with('sections', $sections);
}
public function s2()
{
}
public function s3()
{
}
然后使用第一种方法将其循环播放
@foreach($sections as $dataName => $details)
<li>
<a href="{{ URL::route($details['route']) }}">{{ $dataName }}</a>
</li>
@endforeach
是的,我把结果作为一个HTML链接:
<li>
<a href="http://exam.com/public/user/show/section1">Section_1</a>
</li>
<li>
<a href="http://exam.com/public/user/show/section2">Section_2</a>
</li>
<li>
<a href="http://exam.com/public/user/show/section2">Section_3</a>
</li>
请检查您的routes.php,检查是否有其他路线采用您的控制器方法。它位于您的路线和控制器之间。数组已经以正确的方式传递给视图。与此毫无关系。
答案 1 :(得分:0)
我认为没有理由不这样做,除非$sections
没有传递给视图,或者路由名称与您在路径文件中指定的路径名称不匹配。
@foreach ($sections as $dataName => $details)
<li>
<a href="{{ route($details['route']) }}">{{ $dataName }}</a>
</li>
@endforeach
除非您使用的是Laravel 5(尚未发布)?
如果是这样,那么您可能需要使用新的刀片语法:{!! route($details['route']) !!}