如何使控制器显示在我的刀片布局?
我有从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的URL,它也返回关于吉他调优的所有数据,但是它并不驻留在我的模板系统中。没有使用样式或布局。
我这里有一个刀片模板app/view/home/tuning.blde.php
我的控制器工作得很好。它从DB中获取Guitar调优的名称,并从它创建一个路由,并从该行中打印出所需的数据。
我的问题是,我无法获得控制器的输出和成为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的文章,并试图理解并实现它,但没有用。
有人能帮我弄清楚怎么解决这个问题吗?
发布于 2014-03-17 15:45:33
您不需要按照您所做的方式注册所有的路由,因为它们只能作为一条路由来解决。据我所知,这个命令什么也没做:
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>发布于 2014-03-17 15:57:47
我看到了您在代码的最后部分尝试的内容(生成动态路由)。我真的很兴奋在我的身边测试它,并试图有相同的路线,但它没有工作。我做了以下修改以使它正常工作。我希望这些改变会有任何帮助。
如果我弄错了你的问题,请原谅我。
// 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 casehttps://stackoverflow.com/questions/22436637
复制相似问题