• 08-01-2016, 03:52:09
    #1
    Merhabalar arkadaşlar...

    Verileri görüntülettiğin bir yönetici panelim var. Bu panelde, get metodu aracılığıyla bir takım işlemler yapmak istiyorum fakat aynı sayfa içinden, get metodu ile farklı controller fonksiyonlarına ulaşamıyorum.

    Routes.php sayfası şu şekilde.
    Route::get('/yonetim/duzenle/{id?}', Controllers1@birimDuzenle');
    Route::get('/yonetim/duzenle/{durum?}', Controllers2@durumKontrol');
    Yukarıdaki get metodlarına dikkat ederseniz eğer, her iki get metodu da aynı sayfa üzerinden çağrılıyor.. Yani get metodu olarak,

    localhost.com/yonetim/duzenle?id=1
    linki gelirse, laravelin get metodu ile "id" bilgisi geldiğini anlayıp Controllers1 içinde yer alan birimDuzenle fonksiyonunu çalıştırmasını istiyorum..

    Eğer,
    localhost.com/yonetim/duzenle?durum=aktif
    linki gelirse, laravelin get metodu ile "durum" bilgisi geldiğini anlayıp Controllers2 içinde yer alan durumKontrol fonksiyonunu çalıştırmasını istiyorum..

    Buradaki sorun ise, her iki get metodu da

    localhost.com/yonetim/duzenle
    sayfayı üzerinden çağrıldığı için, laravel her zaman ilk önce yazılanı alıp diğerini görmezde geliyor.

    Demek istediğim şey, linkler alt alta şu şekilde routes.php klasöründe yer alıyorsa eğer,
    siteadresi.com/yonetim/duzenle?id=1
    siteadresi.com/yonetim/duzenle?durum=aktif
    Laravel her zaman, siteadresi.com/yonetim/duzenle?id=1 adresini çalıştırıyor.

    Ben link olarak tarayıcıya siteadresi.com/yonetim/duzenle?durum=aktif yazsam bile laravel yine siteadresi.com/yonetim/duzenle?id=1 linkinin get metodunu çalıştırıyor.

    Tek sayfa üzerinden get metodu ile hem veri pasif/aktif işlemi gerçekleştirmek istiyorum, hem de veri düzenlemek istiyorum... Dediğim sorundan dolayı, sorunsuz şekilde veri güncelleyebilirken aktif/pasif yapma işlemi gerçekleşmiyor. Bu sorunu nasıl çözebilirim?
  • 08-01-2016, 11:52:38
    #2
    Route::get('/yonetim/duzenle/{id?}', Controllers1@birimDuzenle');
    Route::get('/yonetim/duzenle/{durum?}', Controllers2@durumKontrol');
    Buradaki olay şundan kaynaklanıyor. Rota yolları aynı. Rota yollarını değiştireceksin.

    Route::get('/yonetim/duzenle/{id?}', Controllers1@birimDuzenle');
    Route::get('/yonetim/kontrol/{durum?}', Controllers2@durumKontrol');
    Bu şekilde kullanırsan çalışır mesela.

    Ya da 2 controller kullanmak yerine tek controller kullanacaksın ve metodunda şöyle birşey yapacaksın.

    Route::get('/yonetim/duzenle/{id?}/{islem?}', Controllers1@duzenle')
    public function duzenle($id, $islem){
       if($islem=="kontrol"):
       //kontrol işlemi buraya
       elseif ($islem=="guncelle"):
       //güncelleme işlemi buraya
       else:
       //böyle bir işlem yok
       endif;
       
    }
  • 08-01-2016, 14:18:09
    #3
    loc adlı üyeden alıntı: mesajı görüntüle
    Route::get('/yonetim/duzenle/{id?}', Controllers1@birimDuzenle');
    Route::get('/yonetim/duzenle/{durum?}', Controllers2@durumKontrol');
    Buradaki olay şundan kaynaklanıyor. Rota yolları aynı. Rota yollarını değiştireceksin.

    Route::get('/yonetim/duzenle/{id?}', Controllers1@birimDuzenle');
    Route::get('/yonetim/kontrol/{durum?}', Controllers2@durumKontrol');
    Bu şekilde kullanırsan çalışır mesela.

    Ya da 2 controller kullanmak yerine tek controller kullanacaksın ve metodunda şöyle birşey yapacaksın.

    Route::get('/yonetim/duzenle/{id?}/{islem?}', Controllers1@duzenle')
    public function duzenle($id, $islem){
       if($islem=="kontrol"):
       //kontrol işlemi buraya
       elseif ($islem=="guncelle"):
       //güncelleme işlemi buraya
       else:
       //böyle bir işlem yok
       endif;
       
    }

    Sorunun sebebini biliyordum aslında ama route.php dosyasında, aynı rota yolunu kullanarak, rotaya ait bir fonksiyon içerisinde gelen get bilgisi $id ise ve null değilse, Controllers1@birimDuzenle ifadesi ile Controllers1'deki fonksiyonu çağırıp, değilse Controllers2@durumKontrol ifadesi ile Controllers2'deki fonksiyonu çağırabilir miyim diye düşündüm ama bir çözüm bulamadım. Tam olarak nasıl olur bilmiyorum ama şöyle bir şey düşünmüştüm.

    Route::get('/yonetim/duzenle/{id?}/{durum?}', function($id,$durum){
    	if($id)	{
    		// Controllers1@birimDuzenle fonksiyonu çağrılsın.
    	}
    
    	if($durum){
    	    // Controllers2@durumKontrol fonksiyonu çağrılsın.
    	}
    });

    Ama düşündüğümü gerçekleştiremedim. Forumda bu tarz bir öneride bulunanlar çıkabilir diye düşünüp, soruyu sormuştum ama sizden başka ilgilenen olmadı maalesef. Neyse, sanırım dediğiniz gibi tek kontroller ve tek fonksiyon kullanarak işlemleri if-else içerisinde yapma yolunu seçeceğim. İlginiz için teşekkürler..
  • 11-01-2016, 22:45:03
    #4
    Hocam kaliteli sorulara cevap vermeye çalışıyorum forumda, ama şansınıza biraz geç fark ettim konuyu

    Aşağıdaki kodun çalışacağını ümit ediyorum. Çalışmazsa tekrar inceleriz.

    Route::get('/yonetim/duzenle', function()
    {
    	# Buraya sadece yonetim/duzenle adresinden giriş yapılıyor.
    	# Kullanacağınız değikenler buraya GET olarak gelecek.
    	# Bunu da Input kullanarak alabilirsiniz.
    	# Gerekli düzenlemeleri aşağıda yaparsanız çalışacaktır.
    	
    	$request = request();
    
    	if(request('durum')=='aktif') {
    		# durumu aktif olunca çalışacak kısım
    		$controller = \App()->make('ExampleController');
    		return $controller->callAction('index', $parameters = array());
    	}
    
    });
    http://laravel-tricks.com/tricks/cal...-route-closure