I'm new to Laravel and now i manage project that was left by someone.
i try to add a function to API, what i edit :
1) Add a Method :
myproject/app/Http/Controllers/Api/ArticleController.php
2) Add Routes to controler :
myprojectmyproject/routes/api.php
However, when i try to run php artisan route:cache i got below error :
Route cache cleared! \n
LogicException : Unable to prepare route [/] for serialization. Uses Closure.
my route file, myproject/routes/api.php :
Route::group (['prefix' => 'v1', 'middleware' => 'ValidateHeaderSignature'], function() {
Route::group(['prefix' => 'auth'], function() {
Route::post('/login', 'Api\AuthController#login');
Route::post('/register', 'Api\AuthController#register');
Route::post('/login-social-media', 'Api\AuthController#loginSocialMedia');
Route::post('/forgot-password', 'Api\AuthController#forgotPassword');
Route::group(['middleware' => 'jwt.auth'], function() {
Route::patch('/change-password', 'Api\AuthController#changePassword');
Route::post('/logout', 'Api\AuthController#logout');
});
});
Route::group(['prefix' => 'foundation-donate'], function() {
Route::get('/', 'Api\FoundationDonateController#index');
});
Route::group(['prefix' => 'greeting-chat'], function() {
Route::get('/', 'Api\GreetingChatController#index');
});
Route::group(['prefix' => 'prayer-time'], function () {
Route::get('/', 'Api\PrayerTimeController#index');
Route::get('/montly', 'Api\PrayerTimeController#getMontlyPrayerTimes');
});
Route::group(['prefix' => 'asmaul-husna'], function () {
Route::get('/', 'Api\AsmaulHusnaController#index');
});
Route::group(['prefix' => 'guidance'], function () {
Route::get('/zikir', 'Api\GuidanceController#zikirGuidances');
Route::get('/prayer', 'Api\GuidanceController#prayerGuidances');
});
Route::group(['prefix' => 'duas'], function () {
Route::get('/', 'Api\DuasController#index');
Route::get('/index', 'Api\DuasController#index');
Route::get('/all', 'Api\DuasController#allPrayers');
Route::get('/category/{category}', 'Api\DuasController#category');
Route::get('/show/{id}', 'Api\DuasController#show');
});
Route::group(['prefix' => 'zakat'], function () {
Route::get('/', 'Api\ZakatController#index');
Route::get('/index', 'Api\ZakatController#index');
Route::get('/all', 'Api\ZakatController#allPrayers');
Route::get('/category/{category}', 'Api\ZakatController#category');
Route::get('/show/{id}', 'Api\ZakatController#show');
});
Route::group(['prefix' => 'playlist'], function () {
Route::get('/zikir', 'Api\PlaylistSongController#playlistZikir');
Route::get('/shalawat', 'Api\PlaylistSongController#playlistShalawat');
Route::get('/duas', 'Api\PlaylistSongController#playlistDuas');
Route::get('/murottal', 'Api\PlaylistSongController#playlistMurottal');
Route::get('/songs', 'Api\PlaylistSongController#playlistSongs');
});
Route::group(['prefix' => 'dzikir'], function() {
Route::get('/primary', 'Api\DzikirController#primaryDzikir');
Route::get('/my-dzikir', 'Api\DzikirController#myDzikir');
Route::get('/categories', 'Api\DzikirController#dzikirCategories');
Route::group(['middleware' => 'jwt.auth'], function() {
Route::get('/point-total', 'Api\DzikirController#pointTotal');
Route::get('/histories', 'Api\DzikirController#histories');
Route::get('/total-dzikir-history', 'Api\DzikirController#totalDzikirHistory');
Route::post('/post-dzikir', 'Api\DzikirController#postDzikir');
});
});
Route::group(['prefix' => 'sadaqah'], function() {
Route::group(['middleware' => 'jwt.auth'], function() {
Route::get('/histories', 'Api\DzikirController#sadaqahHistories');
});
});
Route::group(['prefix' => 'article'], function() {
Route::get('/', 'Api\ArticleController#index');
Route::get('/daily-reflection', 'Api\ArticleController#getDailyReflection');
Route::get('/get-random', 'Api\ArticleController#getRandom');
});
Route::group(['prefix' => 'notification'], function() {
Route::get('/quote', 'Api\NotificationController#prayerQuotes');
});
Route::group(['prefix' => 'user', 'middleware' => 'jwt.auth'], function() {
Route::get('/show', 'Api\UserController#show');
Route::patch('/update-profile', 'Api\UserController#update');
});
Route::group(['prefix' => 'master'], function() {
Route::get('/location', 'Api\MasterController#location');
});
});
if i got error because of Uses Closure, why previous developer can populate route?
by run php artisan route:list i can see list of route that have ever made before.
any idea ?
===Update, Add routes/web.php
Route::get('/', function () {
return view('welcome');
});
Auth::routes(['register' => false]);
Route::get('/home', 'HomeController#index')->name('home');
Route::get('register/activation/{code}', 'Auth\\RegisterController#activation')->name('register.activation');
Route::group(['prefix' => 'admin', 'middleware' => ['auth']], function() {
Route::get('/user-apps/list-index', ['as' => 'user-apps.list-index', 'uses' => 'Admin\\UserAppsController#listIndex']);
Route::get('/user-apps/resend-confirmation', ['as' => 'user-apps.resend-confirmation', 'uses' => 'Admin\\UserAppsController#resendConfirmation']);
Route::resource('/user-apps', 'Admin\\UserAppsController');
Route::get('/user/list-index', ['as' => 'user.list-index', 'uses' => 'Admin\\UserController#listIndex']);
Route::resource('/user', 'Admin\\UserController');
Route::get('/dzikir-playlist-category/list-index', ['as' => 'dzikir-playlist-category.list-index', 'uses' => 'Admin\\DzikirPlaylistCategoryController#listIndex']);
Route::resource('/dzikir-playlist-category', 'Admin\\DzikirPlaylistCategoryController');
Route::get('/dzikir-playlist/list-index', ['as' => 'dzikir-playlist.list-index', 'uses' => 'Admin\\DzikirPlaylistController#listIndex']);
Route::resource('/dzikir-playlist', 'Admin\\DzikirPlaylistController');
Route::get('/dzikir-playlist-homepage/list-index', ['as' => 'dzikir-playlist-homepage.list-index', 'uses' => 'Admin\\DzikirPlaylistHomepageController#listIndex']);
Route::resource('/dzikir-playlist-homepage', 'Admin\\DzikirPlaylistHomepageController');
Route::get('/dzikir-playlist-my-zikir/list-index', ['as' => 'dzikir-playlist-my-zikir.list-index', 'uses' => 'Admin\\DzikirPlaylistMyZikirController#listIndex']);
Route::resource('/dzikir-playlist-my-zikir', 'Admin\\DzikirPlaylistMyZikirController');
Route::get('/greeting-chat/list-index', ['as' => 'greeting-chat.list-index', 'uses' => 'Admin\\GreetingChatController#listIndex']);
Route::resource('/greeting-chat', 'Admin\\GreetingChatController');
Route::get('/foundation-donate/list-index', ['as' => 'foundation-donate.list-index', 'uses' => 'Admin\\FoundationDonateController#listIndex']);
Route::resource('/foundation-donate', 'Admin\\FoundationDonateController');
Route::get('/asmaul-husna/list-index', ['as' => 'asmaul-husna.list-index', 'uses' => 'Admin\\AsmaulHusnaController#listIndex']);
Route::resource('/asmaul-husna', 'Admin\\AsmaulHusnaController');
Route::get('/guidance/list-index', ['as' => 'guidance.list-index', 'uses' => 'Admin\\GuidanceController#listIndex']);
Route::resource('/guidance', 'Admin\\GuidanceController');
Route::get('/content-category/list-index', ['as' => 'content-category.list-index', 'uses' => 'Admin\\ContentCategoryController#listIndex']);
Route::resource('/content-category', 'Admin\\ContentCategoryController');
Route::get('/duas/list-index', ['as' => 'duas.list-index', 'uses' => 'Admin\\DuasController#listIndex']);
Route::resource('/duas', 'Admin\\DuasController');
Route::get('/zakat/list-index', ['as' => 'zakat.list-index', 'uses' => 'Admin\\ZakatController#listIndex']);
Route::resource('/zakat', 'Admin\\ZakatController');
Route::get('/quote/list-index', ['as' => 'quote.list-index', 'uses' => 'Admin\\QuoteController#listIndex']);
Route::resource('/quote', 'Admin\\QuoteController');
Route::get('/playlist-song-category/list-index', ['as' => 'playlist-song-category.list-index', 'uses' => 'Admin\\PlaylistSongCategoryController#listIndex']);
Route::resource('/playlist-song-category', 'Admin\\PlaylistSongCategoryController');
Route::get('/playlist-song/list-index', ['as' => 'playlist-song.list-index', 'uses' => 'Admin\\PlaylistSongController#listIndex']);
Route::resource('/playlist-song', 'Admin\\PlaylistSongController');
Route::get('/album/list-index', ['as' => 'album.list-index', 'uses' => 'Admin\\AlbumController#listIndex']);
Route::resource('/album', 'Admin\\AlbumController');
Route::get('/artist/list-index', ['as' => 'artist.list-index', 'uses' => 'Admin\\ArtistController#listIndex']);
Route::resource('/artist', 'Admin\\ArtistController');
Route::get('/article/list-index', ['as' => 'article.list-index', 'uses' => 'Admin\\ArticleController#listIndex']);
Route::resource('/article', 'Admin\\ArticleController');
});
When you want to use route caching, you can't use closure to register routes in any file.
As you still have the default route from the fresh Laravel installation in your routes/web.php file, you get this error because when you do php artisan route:cache, Laravel under the hood selializes the routes files and combine them in a single one as he lookup would be quicker.
To solve the issue, you can simply remove the route if that is unneeded or move it to a controller like you did for all the others routes.
The error should be gone then.
Simply delete any route with a callback function like the default routes.
Route::middleware('auth:api')->get('/user', function (Request $request) {
return $request->user();
});
edit in
Route::middleware('auth:api')->get('/user', 'SomeController#someMethod');
What is the best and correct way to write the following routing:
Route::group(['middleware' => ['web']],function (){
Route::prefix('user')->group(function () {
//this address shows the login page
Route::any('login', 'User#login_page');
//others address that control the login action
Route::prefix('login')->group(function (){
Route::get('google', 'User#check_user_login_with_google');
Route::post('form', 'User#check_user_login_with_form');
Route::get('google-url', 'User#redirect_to_google_url');
});
//these address control the registration actions
Route::any('register','User#register');
Route::any('register/check','User#check_user_registration');
});
});
You can do it all in one shot:
Route::group(['prefix' => 'user', 'as' => 'user.', 'middleware' => ['web']], function() {
Route::any('login', 'User#login_page');
...
})
You can use all these in a separate associated array and assign this array to the group here is how to do that .
Route::group(['prefix' => 'user', 'as' => 'user.', 'middleware' => ['web']], function() {
Route::any('login', 'User#login_page');
...
})
Hope this may help you
I am updating a site from Laravel 4 to 5. In L4 I had this set up:
if(Sentry::check()){
Route::get('/', array('as' => 'school.home.index', 'uses' => 'school\AuthSchoolController#index'));
else{
Route::get('/', 'school\SchoolController#index');
}
Note the same url but different controllers depending on login or not.
With L5 I cannot use the middleware tried this:
Route::get('/', 'SchoolController#index');
Route::group(['middleware' => 'auth'], function()
{
Route::get('/', array('as' => 'school.home.index', 'uses' => 'AuthSchoolController#index'));
});
But this just passes over the first and goes to the group, where it gets redirected to the login page and to the admin if logged in.
So I think I need an if/else equivalent in the route based on login but Auth::user() for doesn't seem to work:
if(Auth::check()){
Route::get('/', array('as' => 'school.home.index', 'uses' => 'AuthSchoolController#index'));
}
else{
Route::get('/', 'SchoolController#index');
}
Route::get('/', function()
{
if( Auth::check() ) {
return app()->make('App\Http\Controllers\SchoolController')->callAction('index', []);
} else {
return app()->make('App\Http\Controllers\AuthSchoolController')->callAction('index', []);
}
});
Try reordering the routes like so:
Route::group(['middleware' => 'auth'], function()
{
Route::get('/', array('as' => 'school.home.index', 'uses' => 'AuthSchoolController#index'));
});
Route::get('/', 'SchoolController#index');
I'm trying to route the index page to a different location if logged in however even though my authentication system works, it's not redirecting to where I expected i.e. getLogged, instead it always redirects to getIndex whether I am logged in or not.
Route::filter('auth', function()
{
if (!Sentry::check()) return Redirect::to('/');
});
Route::group(array('before' => 'auth'), function() {
Route::get('/', array('uses' => 'MyController#getLogged'));
});
Route::get('/', array('before' => 'detectLang', 'uses' => 'MyController#getIndex'));
I tested to make sure my auth works by changing
Route::group(array('before' => 'auth'), function() {
Route::get('/', array('uses' => 'MyController#getLogged'));
});
to
Route::group(array('before' => 'auth'), function() {
Route::get('/dash', array('uses' => 'MyController#getLogged'));
});
and that properly behaves that I can only access /dash when I am logged in so why is my index route not working?
You're declaring the same route twice, it won't work. To achieve this functionality, instead of adding a auth filter, add a guest one that, instead of checking if the user is not connected, will check if it is. Something like this:
Route::filter('guest', function () {
if (Sentry::check()) return Redirect::route('logged');
});
Then, setup your routes, something along these lines:
Route::get('/', array(
'as' => 'home',
'uses' => 'MyController#getIndex',
'before' => 'guest'
));
Route::get('/logged', array(
'as' => 'logged',
'uses' => 'MyController#getLogged',
'before' => 'auth|detectLang'
));
Note: The as key gives a name to your route, so you can use it on Redirect::route or URL::route methods.
I'm new to Laravel ( version 3 ), i do not know how to set Route and filters in Laravel so that any unauthorized user that is trying to access any url redirects to the login page (NOT the 404 error), in another word the default home page for unauthorized users is going to be the login page and for the authorized users it's going to be the dashboard.
If you are using laravel Auth class you can create an authorized route group. All routes that are defined there will be redirected if the user isn't logged in. Your router file will look something like this:
Route::get('/', array('as' => 'intro', 'uses' => 'intro#index'));
Route::get( 'login', array('as' => 'login', 'uses' => 'user#login'));
Route::get( 'logout', array('as' => 'logout', 'uses' => 'user#logout'));
// PROTECTED
Route::group(array('before' => 'auth'), function()
{
Route::get('dashboard', array('as' => 'dashboard', 'uses' => 'user#dashboard'));
});
// AUTH FILTER
Route::filter('auth', function()
{
if (Auth::guest()) return Redirect::to('login');
});
Just put a before filter in the declaration of the route like this
Route::get('edit_profile', array('before' => 'auth', function()
{
return View::make('profile.edit');
}));
The Auth filter exists by default in Laravel.