Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Laravel - why not relative URL's?

I have been learning Laravel recently and I have seemingly missed a key point: why should relative links be avoided?

For example, I have been suggested to use URL::to() which outputs the full path of the page passed as a parameter - but why do this when you could just insert a relative link anyway? E.g., putting URL::to('my/page') into a <href> will just insert http://www.mywebsite.com/my/page into the <href>; but on my website href='my/page' works exactly the same. On my website I have based all relative URL's from the index.php file found in the public directory.

Clearly, I'm missing a key point as to why full paths are used.

like image 848
monster Avatar asked Mar 14 '23 01:03

monster


2 Answers

I've found that using route() on named routes to be a much better practice. If at one point you decide, for example, that your admin panel shouldn't point to example.com/admin, but example.com/dashboard, you will have to sift through your entire code to find all references to Url::to("/admin"). With named routes, you just have to change the reference in routes.php

Example:

Route::get('/dashboard', ['as' => 'admin', 'uses' => 'AdminController@index']);

Now every time you need to provide a link to your admin page, just do this:

<a href="{{ route('admin') }}">Admin</a>

Much better approach, in my opinion.

This is even available in your backend, say in AdminController.php

// do stuff
return redirect()->route('admin');

http://laravel.com/docs/5.1/routing#named-routes

like image 50
Pistachio Avatar answered Mar 23 '23 15:03

Pistachio


Neither absolute nor relative links should be used - it's advisable to use named routes like so:

Route::get('my/page', ['as' => 'myPage', function () {
    // return something
}]);

or

Route::get('my/page', 'FooController@showPage')->name('myPage');

Then, generate links to pages using URL::route() method (aliased as route() in L5), which is available in Blade as well as in your backend code.

That way, you can change the path to your routes at any time without having to worry about breaking links anywhere in your application.

like image 28
ciruvan Avatar answered Mar 23 '23 13:03

ciruvan