我想将/ topic / {title}的重定向网址重定向到/ topic / {category} / {title}。 所以我尝试在路线中注册这个:
Route::get('/topic/{title}',function(){
return redirect()->action('/topic/{category}/{title}','DetailController@index');
});
但我收到了错误
操作App \ Http \ Controllers / topic / {category} / {title}未定义。
有人可以帮我解决这些路线吗? 谢谢你的进步。
这是我的控制器
class DetailController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index($section=0,$title = 0)
{
$detail = DB::table('t_artikel')
->join('t_section', 't_section.id_section', '=', 't_artikel.id_section')
//->join('t_kolom', 't_kolom.id', '=', 't_artikel.penalar')
->where('publish', '=', 'Y')
->where('parent_id', '=', 0)
->where('tgl_pub', '<=', date('Y-m-d H:i:s'))
->where('t_artikel.urltitle', '=', $title)
->select('t_artikel.*', 't_section.*', 't_artikel.urltitle as urlartikel')
->first();
$kategori = DB::table('t_section')
->where('id_supsection', '=', 0)
->where('status', '=', 1)
->orderBy('position', 'asc')
->whereNotIn('id_section', [34])
->select('t_section.*')
->get();
$page = 'Detail';
return view ('detail.detail',
['detail' => $detail,
'kategori' => $kategori,
'page' => $page
]);
}
答案 0 :(得分:0)
如果您的控制器路由需要参数,您可以将它们作为第二个参数传递给操作方法
所以,你需要传递这样的参数:
return redirect()->action(
'DetailController@index', ['category' => <enter_value>, 'title' => <enter_value>]
);
答案 1 :(得分:0)
我建议你使用2路和2路控制器。一个处理主题的细节,另一个处理“旧”URL的重定向。
例如:用户将访问由识别主题和类别的控制器处理的“/ topic / title”,然后将使用
public function handleTopic($title){
// the code here will recognize topic and category
// and will just provide the stuff to show the right page
// in the end will redirect to that controller
return redirect()->action('DetailController@index', ['category' => $category, 'title' => $title]);
}
public function index($stuffYouNeed){
// retrieve the rest of data you need to show the page
// you already know the title and category (cause of previous controller)
// in the end return the view with data
return view ('detail.detail',['data' => $data]);
}
在您的路线中,您必须添加一条路线并编辑现有路线,如:
Route::get('topic/{title}', 'DetailController@handleTopic')->name('handleTopic');
Route::get('topic/{category}/{title}', 'DetailController@index')->name('showTopic');
没有测试因为我没有在本地设置laravel env。但我认为它应该有效。让我知道
编辑:我忘了解释为什么会看到错误
操作App \ Http \ Controllers / topic / {category} / {title}未定义。
您使用的重定向不正确
Route::get('/topic/{title}',function(){
return redirect()->action('/topic/{category}/{title}','DetailController@index');
});
您只能提供动作控制器,而不能提供路线。并且目的地路线必须存在。所以正确的用途是:
return redirect()->action('Controller@action');
无论如何,你应该从路线中分离逻辑。你有控制器...即使是非常短的代码块。它将保持一切井然有序。在您的路线文件中,您应该只有路线。
答案 2 :(得分:0)
解决了,我在修改后找到了自己的方式。这是代码:
Route::get('/topik/{title}',function($title){
$article = DB::table('t_artikel')
->join('t_section', 't_section.id_section', '=', 't_artikel.id_section')
->where('publish', '=', 'Y')
->where('parent_id', '=', 0)
->where('tgl_pub', '<=', date('Y-m-d H:i:s'))
->where('t_artikel.urltitle', '=', $title)
->select('t_artikel.*', 't_section.urltitle as urltitlesec', 't_artikel.urltitle as urlartikel')
->first();
$kategori = $article->urltitlesec;
return redirect("/topik/{$kategori}/{$title}");
});
答案 3 :(得分:0)
如果要重定向到URI,则不使用redirect()->action()
;改为使用redirect()->to()
:
Route::get('/topic/{title}', function ($title) {
$category = ''; // Get category some how
return redirect()->to("/topic/{$category}/{$title}");
});