Laravel missing routes issue - php

i have a problem with my Laravel routes.
if i call the following url: http://laravel/market it works fine, but my site has different languages so i use the LaravelLocalization package and when i call http://laravel/en/market it comes an error:
Route [market.offers.show] not defined.
i have used:
php artisan route:list
to see the indexed routes and here is a shortcut of it:
| GET|HEAD | market/offers | market.offers.index | App\Http\Controllers\Front\OffersController#index
| POST | market/offers | market.offers.store | App\Http\Controllers\Front\OffersController#store
| GET|HEAD | market/offers/bid/{id} | market.offers.bid | App\Http\Controllers\Front\OffersController#bid
| GET|HEAD | market/offers/create | market.offers.create | App\Http\Controllers\Front\OffersController#create
| GET|HEAD | market/offers/history | market.offers.history | App\Http\Controllers\Front\OffersController#history
| POST | market/offers/store/bid | market.offers.store.bid | App\Http\Controllers\Front\OffersController#storebid
| DELETE | market/offers/{offers} | market.offers.destroy | App\Http\Controllers\Front\OffersController#destroy
| GET|HEAD | market/offers/{offers} | market.offers.show | App\Http\Controllers\Front\OffersController#show
| PUT|PATCH | market/offers/{offers} | market.offers.update | App\Http\Controllers\Front\OffersController#update
| GET|HEAD | market/offers/{offers}/edit | market.offers.edit | App\Http\Controllers\Front\OffersController#edit
on other pages i get the same error for Route [market.offers.create]
why is that ? How can i resolve that ?

in your routes you should add a wildcard for the language for example it will look like /laravel/{lang}/market
and then in your controllers you handle the if the lang is null or not to set the default language

Related

routes names for a resource not shown properly in laravel 5.7

using laravel 5.7, i have the following code line in routes/web.php
Route::resource('admin/users', 'Admin\AdminUsersController');
when i list routes via : php artisan route:list i get the following:
| | GET|HEAD | admin/users | users.index | App\Http\Controllers\Admin\AdminUsersController#index | web
| | POST | admin/users | users.store | App\Http\Controllers\Admin\AdminUsersController#store | web
| | GET|HEAD | admin/users/create | users.create | App\Http\Controllers\Admin\AdminUsersController#create | web
| | GET|HEAD | admin/users/{user} | users.show | App\Http\Controllers\Admin\AdminUsersController#show | web
| | PUT|PATCH | admin/users/{user} | users.update | App\Http\Controllers\Admin\AdminUsersController#update | web
| | DELETE | admin/users/{user} | users.destroy | App\Http\Controllers\Admin\AdminUsersController#destroy | web
| | GET|HEAD | admin/users/{user}/edit | users.edit | App\Http\Controllers\Admin\AdminUsersController#edit | web
why routes are not named following the directory structure : admin.users.method
Laravel takes the last string after slash in resource routes to decide the route name. You can refer Illuminate/Routing/ResourceRegistrar.php file's register() and prefixedResource() methods.

Connect Route::resource with existing model

I am using Laravel 5.4 and I have created a controller with resources. Now I would like to open the edit page in my app like the following:
a href="{{ route('tasks.edit', ['tasks'=>$storedTask->id]) }}" class='btn btn-default'>Edit</a>
In my view I am using:
Route::resource('/', 'IndexController');
However, I get back
Sorry, the page you are looking for could not be found when opening the link.
When looking into my routes list the URIs are emtpy.
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | / | index | App\Http\Controllers\IndexController#index | web |
| | POST | / | store | App\Http\Controllers\IndexController#store | web |
| | PUT|PATCH | {} | update | App\Http\Controllers\IndexController#update | web |
| | DELETE | {} | destroy | App\Http\Controllers\IndexController#destroy | web |
| | GET|HEAD | {} | show | App\Http\Controllers\IndexController#show | web |
| | GET|HEAD | {}/edit | edit | App\Http\Controllers\IndexController#edit | web |
+--------+-----------+------------------------+------------------+------------------------------------------------------------------------+--------------+
I guess that my model is not "associated" with my controller and therefore the Route::resource view.
Any suggestions how to fix this?
You can't use resource route with just /. Change it to:
Route::resource('tasks', 'IndexController');

Make a difference between Show and create routes

I have all those routes:
Route::resource('tournaments', 'TournamentController');
And in TournamentController, I have :
public function __construct()
{
$this->middleware('auth')->except('show');
}
But When I go to http://laravel.dev/tournaments/create, Laravel thinks create is the tournament slug ( like http://laravel.dev/tournaments/my-tournament/ ) and send me to #show instead of #create.
In this case, I get a Model Not Found coming from SubstituteBindings Middleware...
I don't really understand this one, how can I avoid this confusion???
EDIT: Also list of my routes :
POST | tournaments | tournaments.store | App\Http\Controllers\TournamentController#store | web,ownTournament,auth |
GET|HEAD | tournaments | tournaments.index | App\Http\Controllers\TournamentController#index | web,auth |
GET|HEAD | tournaments/create | tournaments.create | App\Http\Controllers\TournamentController#create | web,ownTournament,auth |
GET|HEAD | tournaments/deleted | | App\Http\Controllers\TournamentController#getDeleted | web,ownTournament,auth |
GET|HEAD | tournaments/{tournament} | tournaments.show | App\Http\Controllers\TournamentController#show | web |
PUT|PATCH | tournaments/{tournament} | tournaments.update | App\Http\Controllers\TournamentController#update | web,ownTournament,auth |
DELETE | tournaments/{tournament} | tournaments.destroy | App\Http\Controllers\TournamentController#destroy | web,ownTournament,auth |
GET|HEAD | tournaments/{tournament}/edit | tournaments.edit | App\Http\Controllers\TournamentController#edit | web,ownTournament,auth |
EDIT: Now I have the same problem with another route:
Route::get('/tournaments/deleted', 'TournamentController#getDeleted');
I get a Model not found by SubstituteBindings Middleware.
I guess Middle is trying to resolve deleted as a tournament name...
Case re-opened!
I found the issue. I had this route:
Route::get('tournaments/{tournament}', 'TournamentController#show')->name('tournaments.show');
at the beginning of my route file.
My bad! I let the answer here for people who get the same problem!

Change default RESTFul actions laravel

I created a controller named CatController with php artisan make:controller CatController. So it generated the next route list:*-> What generated the route list is on routes.php Route::resource('cat','CatsController');
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+-------------------+-------------+-------------------------------------------------+------------+
| | GET|HEAD | / | | Furbook\Http\Controllers\CatController#index | |
| | GET|HEAD | cat | cat.index | Furbook\Http\Controllers\CatController#index | |
| | POST | cat | cat.store | Furbook\Http\Controllers\CatController#store | |
| | GET|HEAD | cat/create | cat.create | Furbook\Http\Controllers\CatController#create | |
| | DELETE | cat/{cat} | cat.destroy | Furbook\Http\Controllers\CatController#destroy | |
| | PATCH | cat/{cat} | | Furbook\Http\Controllers\CatController#update | |
| | PUT | cat/{cat} | cat.update | Furbook\Http\Controllers\CatController#update | |
| | GET|HEAD | cat/{cat} | cat.show | Furbook\Http\Controllers\CatController#show | |
| | GET|HEAD | cat/{cat}/edit | cat.edit | Furbook\Http\Controllers\CatController#edit | |
Later on I thought it would be better to call it CatsController and handle the urls as cats/... so I renamed the controller but I still have the same default REST actions URIs.
Is there anyway to change it? How should I proceed?
To my knowledge the make:controller command only generates the controller file, not any route definitions. The routes defined there look like they've beed generated by a Route::resource definition that would look like this:
Route::resource('cat', 'CatController');
To make that work with cats and CatsControllers you should change it to this:
Route::resource('cats', 'CatsController');
You can read more on RESTful Resource Controllers in the Laravel Documentation.

Overriding rydurham/sentinel route paths in Laravel 5

I am using the rydurhmam/sentinel package in Laravel 5.0.x and I cannot change how the default mysite.com/profile route is handled.
In my routes.php file I have declared Route::resource('profile', 'ProfileController');
When I call php artisan route:list I get:
| GET|HEAD | profile | sentinel.profile.show | Sentinel\Controllers\ProfileController#show | sentry.auth |
| GET|HEAD | profile/create | profile.create | App\Http\Controllers\ProfileController#create | sentry.auth |
| POST | profile | profile.store | App\Http\Controllers\ProfileController#store | sentry.auth |
| GET|HEAD | profile/{profile} | profile.show | App\Http\Controllers\ProfileController#show | sentry.auth |
| GET|HEAD | profile/{profile}/edit | profile.edit | App\Http\Controllers\ProfileController#edit | sentry.auth |
| PUT | profile/{profile} | profile.update | App\Http\Controllers\ProfileController#update | sentry.auth |
| PATCH | profile/{profile} | | App\Http\Controllers\ProfileController#update | sentry.auth |
| DELETE | profile/{profile} | profile.destroy | App\Http\Controllers\ProfileController#destroy | sentry.auth |
And you'll notice the first profile route is handled by the Sentinel Controller found within the vendor package file.
The sentinel config file only allows you to turn off routing in its entirety, so is there anyway to override selected controllers or am I SOL?
Try this:
In config/sentinel.php
'routes_enabled' => false,
in your routes.php
include(dirname(with(new ReflectionClass('Sentinel\SentinelServiceProvider'))->getFileName()) . '/../routes.php');
and declare your routes as normal in routes.php file after include
and that should work fine.
let me know.

Categories