Laravel 5 路由
Laravel 5 Routing
作为 Laravel 5 编程的初学者,我正在尝试开发一个基本应用程序以学习 Laravel 5 基础知识。在我的应用程序中,我有几个页面,我试图将它们路由为:
Route::get('/', 'PagesController@index');
Route::get('/vehicles', 'PagesController@vehiclepage');
Route::get('/calculation', 'PagesController@calculationpage');
Route::get('/settings', 'PagesController@settingspage');
页面控制器:
class PagesController extends Controller {
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
return view('index');
}
public function vehiclepage()
{
return view('vehiclepage');
}
public function calculationpage()
{
return view('calculationpage');
}
public function settingspage()
{
return view('settingspage');
}
}
这些页面中也会进行一些表单处理。我想知道,是否有更有效的方法为我的页面提供更好的路由?任何帮助将不胜感激。
试试这个
Route::get('{page}', function($page) {
return View::make($page);
});
我也是 laravel 的新手,我认为你做的事情是正确的。但只是一个小建议,尽量让你的代码非常干净以备将来使用,就像那样:
class PagesController extends Controller {
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
return view('index');
}
public function vehiclepage()
{
return view('vehiclepage');
}
public function calculationpage()
{
return view('calculationpage');
}
public function settingspage()
{
return view('settingspage');
}
}
由于 public 函数 vehiclepage 是新函数,它不是 public 函数索引的一部分。
我有同样的问题,因为我来自 KOHANA FW,然后我在我的 Laravel 项目中这样做了:
Route::get('/{controller?}/{action?}/{id?}', function ($controller='Home', $action='defaulmethod', $id = null) {
$controller = ucfirst($controller);
return APP::make("{$controller}Controller")->$action($id);
});
它在 url 是这样的时候有效:
/{Controller}/{action}/{id}
但我觉得你的路由系统还不错,很容易理解,如果你不做大项目 - 你可以使用它。
首先,如果您想在站点的主要路径上访问这些页面,如:/{pagename},最好的方法是保持原样。将它们一一列出。这不好有主站点路由“/”的动态匹配路由器。
如果您可以为此路由设置一些前缀,如:'/page/{pagename}',这是一个不错的动态加载程序..
class PagesController extends Controller {
public function show( $slug)
{
$pageslug = 'page.' . (string)$slug;
// This means that your views must be in views/page/ folder
if( view()->exists($pageslug)){
return view($pageslug);
}
abort(404);
}
}
你的路线是:
Route::get('/page/{slug}', 'PagesController@show');
最后,views/page/XXXX 中的所有视图都可以在 /page/{viewname}
上访问
您的路由非常好,尽管还有其他选择。例如,您可以这样定义路由:
routes.php
Route::get('login', ['uses' => 'LoginController@index']);
Route::controller('/', 'WelcomeController');
WelcomeController.php
class PagesController extends Controller {
public function getIndex()
{
return view('homepage');
}
public function getVehicle()
{
return view('vehiclepage');
}
public function getCalculation()
{
return view('calculationpage');
}
public function getSettings()
{
return view('settingspage');
}
}
这样做是将 GET 请求路由到您的 domain/login 到您的 LoginController
的 index
方法(假设您有一个),如果参数是任何东西否则,它将尝试在 PagesController
中找到以 get
开头并以被请求的单词结尾的方法,然后提供它,因此对 your.domain/settings 的 GET 请求将最终进入 PagesController
的 getSettings
方法。您可以阅读更多有关这一切如何运作的信息 in the docs
注意 - 我并不是说这种方法 更好 - 有些人说 "monolithic" 路由器是魔鬼,而其他人(比如我)更喜欢在控制器中拥有所有逻辑,并以最简洁的方式定义路由。这一切都取决于个人喜好和风格。请记住,一致性是关键 - 无论您喜欢哪种方法,请坚持下去!
您可以进行路由模型绑定(google),您可以使用诸如
之类的通配符来忽略它
pagename/{id}
您可以使用 Route::resource()
参见:http://laravel.com/docs/5.0/controllers#restful-resource-controllers
如 Kaloyan Doichinov 所说,如果您愿意,隐式控制器路由可能适合您。
你的 route.php 文件就像
Route::controller('/','yourControllerName');
并且你的控制器方法应该用 http 动词预先添加,比如
例如 index() => getIndex(){} 等
所以对于 post 请求使用 => postMethodName(){} //用您的方法名称更改 MethodName。
等等放置、删除等请求......
作为 Laravel 5 编程的初学者,我正在尝试开发一个基本应用程序以学习 Laravel 5 基础知识。在我的应用程序中,我有几个页面,我试图将它们路由为:
Route::get('/', 'PagesController@index');
Route::get('/vehicles', 'PagesController@vehiclepage');
Route::get('/calculation', 'PagesController@calculationpage');
Route::get('/settings', 'PagesController@settingspage');
页面控制器:
class PagesController extends Controller {
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
return view('index');
}
public function vehiclepage()
{
return view('vehiclepage');
}
public function calculationpage()
{
return view('calculationpage');
}
public function settingspage()
{
return view('settingspage');
}
}
这些页面中也会进行一些表单处理。我想知道,是否有更有效的方法为我的页面提供更好的路由?任何帮助将不胜感激。
试试这个
Route::get('{page}', function($page) {
return View::make($page);
});
我也是 laravel 的新手,我认为你做的事情是正确的。但只是一个小建议,尽量让你的代码非常干净以备将来使用,就像那样:
class PagesController extends Controller {
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
return view('index');
}
public function vehiclepage()
{
return view('vehiclepage');
}
public function calculationpage()
{
return view('calculationpage');
}
public function settingspage()
{
return view('settingspage');
}
}
由于 public 函数 vehiclepage 是新函数,它不是 public 函数索引的一部分。
我有同样的问题,因为我来自 KOHANA FW,然后我在我的 Laravel 项目中这样做了:
Route::get('/{controller?}/{action?}/{id?}', function ($controller='Home', $action='defaulmethod', $id = null) {
$controller = ucfirst($controller);
return APP::make("{$controller}Controller")->$action($id);
});
它在 url 是这样的时候有效:
/{Controller}/{action}/{id}
但我觉得你的路由系统还不错,很容易理解,如果你不做大项目 - 你可以使用它。
首先,如果您想在站点的主要路径上访问这些页面,如:/{pagename},最好的方法是保持原样。将它们一一列出。这不好有主站点路由“/”的动态匹配路由器。
如果您可以为此路由设置一些前缀,如:'/page/{pagename}',这是一个不错的动态加载程序..
class PagesController extends Controller {
public function show( $slug)
{
$pageslug = 'page.' . (string)$slug;
// This means that your views must be in views/page/ folder
if( view()->exists($pageslug)){
return view($pageslug);
}
abort(404);
}
}
你的路线是:
Route::get('/page/{slug}', 'PagesController@show');
最后,views/page/XXXX 中的所有视图都可以在 /page/{viewname}
上访问您的路由非常好,尽管还有其他选择。例如,您可以这样定义路由:
routes.php
Route::get('login', ['uses' => 'LoginController@index']);
Route::controller('/', 'WelcomeController');
WelcomeController.php
class PagesController extends Controller {
public function getIndex()
{
return view('homepage');
}
public function getVehicle()
{
return view('vehiclepage');
}
public function getCalculation()
{
return view('calculationpage');
}
public function getSettings()
{
return view('settingspage');
}
}
这样做是将 GET 请求路由到您的 domain/login 到您的 LoginController
的 index
方法(假设您有一个),如果参数是任何东西否则,它将尝试在 PagesController
中找到以 get
开头并以被请求的单词结尾的方法,然后提供它,因此对 your.domain/settings 的 GET 请求将最终进入 PagesController
的 getSettings
方法。您可以阅读更多有关这一切如何运作的信息 in the docs
注意 - 我并不是说这种方法 更好 - 有些人说 "monolithic" 路由器是魔鬼,而其他人(比如我)更喜欢在控制器中拥有所有逻辑,并以最简洁的方式定义路由。这一切都取决于个人喜好和风格。请记住,一致性是关键 - 无论您喜欢哪种方法,请坚持下去!
您可以进行路由模型绑定(google),您可以使用诸如
之类的通配符来忽略它pagename/{id}
您可以使用 Route::resource()
参见:http://laravel.com/docs/5.0/controllers#restful-resource-controllers
如 Kaloyan Doichinov 所说,如果您愿意,隐式控制器路由可能适合您。 你的 route.php 文件就像 Route::controller('/','yourControllerName');
并且你的控制器方法应该用 http 动词预先添加,比如 例如 index() => getIndex(){} 等
所以对于 post 请求使用 => postMethodName(){} //用您的方法名称更改 MethodName。
等等放置、删除等请求......