wobsoriano
wobsoriano

Reputation: 13434

Laravel href redirection

So I've started using Laravel and I found it very easy and now I'm creating my own restful services. My problem is I don't know if I am doing the href link correct, but yes it is working. Here is the code:

<a href="{{URL::to('accounts/create')}}">Add user</a>

And in my controller I just render the blade:

public function create()
{
    return view('accounts.create');
}

So if I click the link Add user, it will redirect me to localhost:8080/accounts/create which is working well. My question is, is there a better way of doing this? Like if ever I changed any in my routes file, I will not change anymore the href link?

Upvotes: 0

Views: 11545

Answers (4)

Jes&#250;s
Jes&#250;s

Reputation: 780

Yes, you can use the action() helper to call a method inside a controller and generate the route to it automatically on demand.

So let's consider you have a controller called FrontendController.php and a method called showFrontend( $section), and assuming that you have a route that matches this controller and method (let's say "frontend/show/{$section}", you can call:

action('FrontendController@showFrontend', array( 'index' ) )

That will return:

frontend/show/index

So basically it looks for the route associated to that method/controller. You can combine this with other helpers to create a whole URL.

NOTE: Consider the namespaces, in case that you have different folder for controllers, nested resources, etc.

I hope it helps!

Upvotes: 1

haakym
haakym

Reputation: 12358

What you can do is give your route a name using the as key in the array in the second argument of your route:

Route::get('accounts/create', [
    'as'   => 'accounts.create',
    'uses' => 'AccountController@create'
]);

Then you can refer to this route in your application by it's name and it'll go to the same place even if you happen to change the URL. For an anchor tag you can do the following:

{{ URL::route('accounts.create') }}

If you're using a resource controller there will be predefined routes which you can see here under Actions Handled By Resource Controller: http://laravel.com/docs/5.1/controllers#restful-resource-controllers

You can always get a quick overview of your available routes and their names by running php artisan route:list

Upvotes: 2

karanmhatre
karanmhatre

Reputation: 356

Ideally, you will name the route in your routes file. Something like,

Route::get('accounts/create', [as => 'createAccount', 'uses' => 'AccountsController@create']);

You will use it as follows

<a href="{{URL::route('createAccount')}}">Add user</a>

in your view.

This way, even if you change the url (accounts/create), or the action name (create), you will not have to change it in the view. Allows your view to be independent.

Upvotes: 4

Bishal Paudel
Bishal Paudel

Reputation: 1946

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

Example:

Route::get('accounts/create', array('as' => 'signup', 'uses' => 'UserController@create'));

<a href="{{URL::route('signup')}}">Add user</a>

This route is named as "signup" and you can change the url anytime as:

Route::get('accounts/signup', array('as' => 'signup', 'uses' => 'UserController@create'));

Upvotes: 1

Related Questions