Duyuruyu Kapat
Facebook Gözat
Twitter Gözat

Laravel - A Clean & Classy PHP Framework

Konu, 'Framework / MVC' kısmında sineld tarafından paylaşıldı.

Etiketler:
  1. sineld

    sineld Daimi Üye

    Kayıt:
    30 Eylül 2005
    Mesajlar:
    2,075
    Beğenilen Mesajlar:
    0
    Meslek:
    Coder, Bilgi İşlemci, Satınalma
    Şehir:
    Bursa, Türkiye
    + 1
     
  2. deathisonitsway

    deathisonitsway x-coder

    Kayıt:
    7 Kasım 2007
    Mesajlar:
    6,140
    Beğenilen Mesajlar:
    6
    Meslek:
    php-coder
    Şehir:
    abroad
    bi sorum var iyi laravelcilere..

    PHP:

    Route
    ::get('/', function(){    return View::make('index',array("foo"=>"blablabla"));});


    index.blade.php

    PHP:

    @extends('layout')@section('Mycontent')    {{ $foo }}@stop



    layout.blade.php

    PHP:

    death1 
    <br>        @yield('Mycontent')
    <
    br>

    death2



    bu kod niye çalışmaz...

    Symfony \ Component \ Debug \ Exception \ FatalErrorException

    syntax error, unexpected '?'


    böyle bir hata veriyor...
     
  3. cgelis

    cgelis Aktif Üye

    Kayıt:
    28 Aralık 2011
    Mesajlar:
    424
    Beğenilen Mesajlar:
    0
    Meslek:
    Yazılım Mühendisi
    Şehir:
    İstanbul
    tam stacktrace'i ve hatayı gösterirsen daha iyi olur.
     
  4. sergin

    sergin Daimi Üye

    Kayıt:
    8 Aralık 2012
    Mesajlar:
    655
    Beğenilen Mesajlar:
    9
    Şehir:
    Ankara
    @deathisonitsway, gerçi siz iyi laravelcilere sormuşsunuz ama Bu kodlarda bir sorun yok, çalışır. Çalışıyor da.
    Hata başka bir yerde olmalı. Beklenmeyen "?" olarak hata verdiğine dikkat ediniz.
     
  5. deathisonitsway

    deathisonitsway x-coder

    Kayıt:
    7 Kasım 2007
    Mesajlar:
    6,140
    Beğenilen Mesajlar:
    6
    Meslek:
    php-coder
    Şehir:
    abroad
    @cggelis cok enteresan şimdi çalışıyor..sürümden felan kaynaklanmaz değil mi bu blade olayı...

    @sergin ? beklenmedik nedir???

    düzeltme : Peki bir şey daha.. bu /public/ url de listelemesini nasıl kaldırcaz.. localde deniyorum su an laraveli..

    localhost/spartan/public/ diye rotaları deniyorum ama public niye direk localhost/spartan/ diye calıssa..
     
  6. cgelis

    cgelis Aktif Üye

    Kayıt:
    28 Aralık 2011
    Mesajlar:
    424
    Beğenilen Mesajlar:
    0
    Meslek:
    Yazılım Mühendisi
    Şehir:
    İstanbul
    blade üzerinde şu anda düzensiz çalışan bazı şeyler var. yan yana "@" ile başlayan ifadeler kullanmamaya özen göster. Mesela şu hata verir;

    @lang('foo') bar @lang('baz')

    bunun yerine

    {{{ trans('foo') }}} bar {{{ trans('baz') }}}

    tercih edebilirsin.

    public klasörü için ise; bu kullandığın web sunucusuna göre değişir. yapman gereken public klasörünü DOCUMENT ROOT yapmak.
     
  7. deathisonitsway

    deathisonitsway x-coder

    Kayıt:
    7 Kasım 2007
    Mesajlar:
    6,140
    Beğenilen Mesajlar:
    6
    Meslek:
    php-coder
    Şehir:
    abroad
    @cgelis

    'public' => __DIR__.'/../public',

    bootstrap deki paths.php nin icindeki bu satırdan public i kaldırdım ama pek başarılı olduğu söylenemez..
     
  8. cgelis

    cgelis Aktif Üye

    Kayıt:
    28 Aralık 2011
    Mesajlar:
    424
    Beğenilen Mesajlar:
    0
    Meslek:
    Yazılım Mühendisi
    Şehir:
    İstanbul
    Dediğim gibi, bu konu web sunucusuyla ilgili. Yani eğerki nginx veya apache kullanıyorsan virtual hostlardan bu durumu ayarlamalısın. Ama sana tavsiyem laravel'in development sunucusunu kullanmak. En kolayı ve etkilisi o. (PHP 5.4 üstü gerektirir)

    http://laravel.com/docs/quick (serving laravel başlığı altında)

    --- Ekleme ---

    Ek olarak; dediğin yöntem ile de yapabilirsin. Bu durumda public klasörü altındaki herşeyi bir üst klasöre taşımalısın.
     
  9. sergin

    sergin Daimi Üye

    Kayıt:
    8 Aralık 2012
    Mesajlar:
    655
    Beğenilen Mesajlar:
    9
    Şehir:
    Ankara
  10. deathisonitsway

    deathisonitsway x-coder

    Kayıt:
    7 Kasım 2007
    Mesajlar:
    6,140
    Beğenilen Mesajlar:
    6
    Meslek:
    php-coder
    Şehir:
    abroad
    evet öyle yaptım ancak index.php icindeki ../ kısmınıda kaldırmam gerekiyormuş..umarım sağlıklıdır bu yöntem..
     
  11. cgelis

    cgelis Aktif Üye

    Kayıt:
    28 Aralık 2011
    Mesajlar:
    424
    Beğenilen Mesajlar:
    0
    Meslek:
    Yazılım Mühendisi
    Şehir:
    İstanbul
    Bunun sebebi güvenlik. public klasörü dışında hiç birşey web tarafından ulaşılabilir değil.

    Bunun diğer bir yöntemi (CodeIgniter'da ve birçok yazılımda uygulanan); index.php içinde bir sabit tanımlamak (genelde bunun ismi BASEPATH'tir) ve daha sonra bu BASEPATH'in varlığını diğer app klasörü içindeki dosyalarda tek tek check ederiz. Eğerki BASEPATH sabiti set edilmemiş ise o dosyaya index.php üzerinden gelinmemiştir deriz ve exit() deriz. Kısacası public klasörü ile bu yönteme gerek yok.
     
  12. deathisonitsway

    deathisonitsway x-coder

    Kayıt:
    7 Kasım 2007
    Mesajlar:
    6,140
    Beğenilen Mesajlar:
    6
    Meslek:
    php-coder
    Şehir:
    abroad
    zaten ana dizinde .htaccess yok direk ana dizine alırsam sorun olmaz herhalde..o değilde şimdi gelicek @sinelde rezil olduk iyi mi :)
     
  13. sineld

    sineld Daimi Üye

    Kayıt:
    30 Eylül 2005
    Mesajlar:
    2,075
    Beğenilen Mesajlar:
    0
    Meslek:
    Coder, Bilgi İşlemci, Satınalma
    Şehir:
    Bursa, Türkiye
    est. Ali ne münasebet.

    Şaşırmadım değil ama çok sevindim doğrusu.

    public olayına gelince, güvenlik gereği bunu kullanmak büyük avantaj, dosyaları ana dizine taşıyacağına bence en iyisi bir virtual host tanımla ve public yerinde dursun. Nasıl yapılacağına ilişkin bilgiler web sayfamda mevcut.

    http://www.sinaneldem.com.tr/laravel-framework-kurulumu/
     
  14. deathisonitsway

    deathisonitsway x-coder

    Kayıt:
    7 Kasım 2007
    Mesajlar:
    6,140
    Beğenilen Mesajlar:
    6
    Meslek:
    php-coder
    Şehir:
    abroad
    anladım sineld ee ne yapalım oyle yapalım bari simdilik..tam kavramadıktan sonra zaten proje yapmam bununla..daha once bir defa output alıp bırakmıstım...ama simdi ogrenmeye karar verdim..artisan olayı hoşuma gitti :) peki bir soru

    PHP:

    Route
    ::get("/",function() { return 'blabla'; });

    bunun boyle kullanılmasının mantıgı nedir? birde her methoda static yapmak cok dogru bir şey midir
     
  15. sineld

    sineld Daimi Üye

    Kayıt:
    30 Eylül 2005
    Mesajlar:
    2,075
    Beğenilen Mesajlar:
    0
    Meslek:
    Coder, Bilgi İşlemci, Satınalma
    Şehir:
    Bursa, Türkiye
    Laravel'de methodlar static görünümlüdürler ama esasen değildirler.

    Örneğin:

    PHP:
    View::make('hello');
    tetiklediğin zaman

    PHP:
    $app->make('view')->make('hello');
    çalıştırmış olursun.

    Sevgili Muhammed Usman'ın konu ile ilgili güzel bir makalesi var.

    PHP:
    Route::get("/",function() { return 'blabla'; });
    ile

    adres satırında projenin kök dizini rotası mevcut ise ekrana "blabla" bastır

    denilmektedir.
     
  16. deathisonitsway

    deathisonitsway x-coder

    Kayıt:
    7 Kasım 2007
    Mesajlar:
    6,140
    Beğenilen Mesajlar:
    6
    Meslek:
    php-coder
    Şehir:
    abroad
    this operatörü gibi hımm.anladım!!! güzelmiş..

    PHP:

    Route
    ::get("/",function() { return 'blabla'; } );  

    // yerine

    Route::get("/","blabla"); 

    //yapılsa daha iyi olmaz mı..yada yapı da soyle bir şey de var

    //controller sınıflarını get yaparken 

    Route::get("/","fooController@blabla");

    // bu cok iyi ve güzel mesela..sade ve anlaşılır..ama
    //uses olayı var birde.

    Route::get("/",array("uses"=>"fooController@blabla"));

    bunlar arasında kullanım farklarını sormak istedim aslında..y
     
  17. sineld

    sineld Daimi Üye

    Kayıt:
    30 Eylül 2005
    Mesajlar:
    2,075
    Beğenilen Mesajlar:
    0
    Meslek:
    Coder, Bilgi İşlemci, Satınalma
    Şehir:
    Bursa, Türkiye
  18. deathisonitsway

    deathisonitsway x-coder

    Kayıt:
    7 Kasım 2007
    Mesajlar:
    6,140
    Beğenilen Mesajlar:
    6
    Meslek:
    php-coder
    Şehir:
    abroad
    türkce ingilizce farketmez tabide..gördüydüm o dökümantasyonu..teşekkürler bu arada karıştırırken senin adının geçtiği kitaplarda gördüm :)
     
  19. sergin

    sergin Daimi Üye

    Kayıt:
    8 Aralık 2012
    Mesajlar:
    655
    Beğenilen Mesajlar:
    9
    Şehir:
    Ankara
    Bu, get veya benzeri Router metodlarının Laravel tarafından dahili olarak nasıl halledildiği ile ilgilidir. Laravel request ve response için Symfony 2'nin sınıflarını kullanıyor. İstek sonrası bir response'nin döndrülmesi gerekiyor ve siz bir controller metoduna bağlasanız da, Closure olarak bağlasanız da sonuçta bir response döndürülmesi gerekiyor.

    Sorunuzla ilgili işlemi kısaca anlatırsam, Laravel dahili işleme sırasında ikinci parametrenin ne olduğuna bakıyor. Normalde bunun bir dizi olması lazımdır. Eğer değilse bunun sadece ya bir isimsiz fonksiyon olacağını yada bir controller eylemi olabileceğini düşünüyor. Eğer bir Closure ise onunla bir dizi yapıyor. Eğer değilse string mi diye bakıyor. String ise bunu array('uses' => string) olarak biz dizi yapıyor. Eğer string de değilse zaten dizidir (ve bu dizide uses dışında as falan gibi başka key'ler de olabilir) aynen alıp işlerin gerisine bu diziyle devam ediyor (Tabi dizi de değilse sorun olabilir o zaman istisna fırlatacaktır) ve onu işlerken de dizi içinin bir Closure mi olup olmadığına bakarak işlem gerçekleştiriyor.
    PHP:

    // createRoute metodundan alınmıştır. 
    if ( ! is_array($action))
     {
        
    $action $this->parseAction($action);
     }
    //protected function parseAction($action) metodundan alınmıştır. 

    if ($action instanceof Closure)
     {
      return array(
    $action);
     }
    elseif (
    is_string($action))
      {
       return array(
    'uses' => $action);
      } 
    throw new \
    InvalidArgumentException("Unroutable action.");
    Dolayısıyla sizin
    Kod:
    
    [COLOR=#0000BB][FONT=monospace]Route[COLOR=#007700][FONT=monospace]::[COLOR=#0000BB][FONT=monospace]get[COLOR=#007700][FONT=monospace]([COLOR=#DD0000][FONT=monospace]"/"[COLOR=#007700][FONT=monospace],[COLOR=#DD0000][FONT=monospace]"fooController@blabla"[COLOR=#007700][FONT=monospace]);
    
    ya da

    Kod:
    
    [COLOR=#0000BB][FONT=monospace]Route[COLOR=#007700][FONT=monospace]::[COLOR=#0000BB][FONT=monospace]get[COLOR=#007700][FONT=monospace]([COLOR=#DD0000][FONT=monospace]"/"[COLOR=#007700][FONT=monospace],array([COLOR=#DD0000][FONT=monospace]"uses"[COLOR=#007700][FONT=monospace]=>[COLOR=#DD0000][FONT=monospace]"fooController@blabla"[COLOR=#007700][FONT=monospace]));  
    
    yazmanız arasında fark yok, ilkini zaten ikinciye çevirecektir. Böylece ikinci parametre eğer bir dizi ise mutlaka "uses" keyi olan bir dizi olacak.
    Sonraki basamakta "uses" keyinin değerine bakıyor. "@" ile ikiye ayırıyor, bunun ilki controllerin adıdır, ikincisi metodun adıdır diye karar veriyor

    Kod:
    [COLOR=#E71818][FONT=monospace][B]list[/B][COLOR=#333333][FONT=monospace]([COLOR=#D59401][FONT=monospace][B]$controller[/B][COLOR=#333333][FONT=monospace], [COLOR=#D59401][FONT=monospace][B]$method[/B][COLOR=#333333][FONT=monospace]) = [COLOR=#333333][FONT=monospace][B]explode[/B][COLOR=#333333][FONT=monospace]([COLOR=#008000][FONT=monospace]'@'[COLOR=#333333][FONT=monospace], [COLOR=#D59401][FONT=monospace][B]$attribute[/B][COLOR=#333333][FONT=monospace]);
    
    ve o controllerdeki o metodu çağırıyor. Yani sonuç olarak yine bir fonksiyon sonucu döndürülmüş oluyor. İkinci parametre bir Closure olsaydı direkt onu döndürecekti.

    Ancak,

    Kod:
    
    [COLOR=#0000BB][FONT=monospace]Route[COLOR=#007700][FONT=monospace]::[COLOR=#0000BB][FONT=monospace]get[COLOR=#007700][FONT=monospace]([COLOR=#DD0000][FONT=monospace]"/"[COLOR=#007700][FONT=monospace],[COLOR=#DD0000][FONT=monospace]"blabla"[COLOR=#007700][FONT=monospace]); 
    
    dediğinizde, bunu bir controller metodu sanacak ve array('uses' => 'blabla') döndürecektir. Böylece işin ikinci kısmında @ ile bölme aşamasından itibaren sorun çıkacaktır ve istisna oluşacaktır.
     
  20. deathisonitsway

    deathisonitsway x-coder

    Kayıt:
    7 Kasım 2007
    Mesajlar:
    6,140
    Beğenilen Mesajlar:
    6
    Meslek:
    php-coder
    Şehir:
    abroad
    anladım sergin açıklamalar için teşekkürler...bakalım zaman buldukça iyi öğrenmeye çalışacağım laraveli..bu arada fw düşmanı olmadıgımı da bir nevi göstermiş olurum size :) fenada olmaz hani..önyargıları yenmek lazım