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 到您的 LoginControllerindex 方法(假设您有一个),如果参数是任何东西否则,它将尝试在 PagesController 中找到以 get 开头并以被请求的单词结尾的方法,然后提供它,因此对 your.domain/settings 的 GET 请求将最终进入 PagesControllergetSettings 方法。您可以阅读更多有关这一切如何运作的信息 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。

等等放置、删除等请求......