如何在刀片布局中显示控制器?
我有从MySQL导入的250条动态路由。它们是使用以下控制器生成的。
public function registerTuningRoutes()
{
// $tunings = Tuning::all(); // Assume that you have a model Tuning
// Or you may use this instead
$tunings = DB::table('guitar_tunings_links')->get();
// Now loop all tunings and declare routes
foreach($tunings as $tuning)
{
$url = '/tuning/' . $tuning->tuning;
$route_name = 'tuning.' . $tuning->tuning;
Route::any($url, $route_name); // You may use get/post
}
}
public function TuningMethod($tuning = null)
{
// $tuning will contain the current tuning name, check
$tuning_name = ($tuning);
$tuning_name = strtoupper($tuning_name);
$user = DB::table('guitar_tunings_links')->where('tuning', $tuning_name)->first();
echo "<div class=\"panel panel-default\">
<div class=\"panel-heading\">$user->name - $tuning_name</div>
<div class=\"panel-body\">
$user->description
</div>
</div>";
}
这是我的路线......
Route::any('{field}', 'TuningController@TuningMethod');
App::make('TuningController')->registerTuningRoutes();
此控制器和路由为我提供了这样的网址
laravel.dev/eadgbe
也会返回有关吉他调音的所有数据,但它并不存在于我的模板系统中。没有使用任何样式或布局。
我在这里有一个刀片模板app / views / home / tuning.blade.php
我的控制器效果很好。它从数据库中获取吉他调音的名称,并从中创建一个路线并从该行打印出所需的数据。
我的问题是我无法获得控制器的输出和路由成为tuning.blade.php模板的一部分。
我尝试添加以下路线
// Route 1
Route::get('tuning/{field}', function(){
return View::make('home.tuning.{field}')
});
// Route 2
Route::get('tuning/{field}', function(){
return View::make('home.{field}')
});
我已经在Laravel文档部分阅读了很多关于路由控制器的内容,但我觉得我不理解它或者我错过了一些简单的东西。
此外,我发现这篇关于提前路由的文章http://daylerees.com/codebright/advanced-routing并试图理解并实施它无济于事。
任何人都可以帮助我了解如何解决这个问题吗?
答案 0 :(得分:5)
您不必按照自己的方式注册所有路线,因为它们只能被解析为一条路线。据我所知,这个命令什么都不做:
Route::any($url, $route_name);
因为它没有指向控制器,所以它只是指向一个名称tuning.something
,这对Laravel路由器系统来说没什么。所以,实际上你的整个registerTuningRoutes
函数什么也没做。但是你已经有了一条工作路线,它正在做所有的工作:
Route::any('{field}', 'TuningController@TuningMethod');
话虽这么说,看起来你可以削减一些代码并保持这条路线:
Route::any('{field}', 'TuningController@TuningMethod');
您的控制器方法已在使用但必须更改才能直接呈现视图:
<?php
public function TuningMethod($tuning = null)
{
// $tuning will contain the current tuning name, check
$tuning_name = ($tuning);
$tuning_name = strtoupper($tuning_name);
$user = DB::table('guitar_tunings_links')->where('tuning', $tuning_name)->first();
return View::make('home.tuning')->with('user', $user)->with('tuning_name', $tuning_name);
}
app/views/home/tuning.blade.php
文件可能类似于:
@extends('layout')
@section('content')
<div>
You HTML here to beautifully render your page.
This is your tunning details:
<div class="panel panel-default">
<div class="panel-heading">$user->name - $tuning_name</div>
<div class="panel-body">
$user->description
</div>
</div>
</div>
@stop
你应该有一个app/views/layout.blade.php
文件,用HTML和body标签包装它:
<html>
<body>
@yield('content')
</body>
</html>
答案 1 :(得分:1)
我在代码的最后部分看到了你所尝试的内容(生成动态路由)。我真的很高兴在我身边测试它并尝试使用相同的路线,但它没有用。我做了以下更改以使其正常工作。我希望这些改变会有所帮助。
P.S。如果我错误地提出你的问题,请原谅我。
// Routes.php
Route::get('testCall/{testVariable}', array(
'as' => 'test', // This is the name of your route
'uses' => 'Parekhchintan30\Test\TestController@testFunction'
));
// TestController.php
public function testFunction($testVariable){
return View::make('test::'.$testVariable); // obviously you will need a view with that name
}//test is the name of my package in this case