Giriş yapmadınız.

Duyuru

TÜRKÇE KİTAP DUYURUSU:
Laravel 5 : Laravel 5.1 Güzelliği (Türkçe)
Vue.js 2 : Vue.js 2 Majesteleri (Türkçe)

#1 Yanıt: Laravel 5.x Yardım » Laravel 5.6 Login İşlemini Çalıştıramıyorum » 17.08.2018 20:53:48

Laravel'in kendi auth özelliğini kullanmamanızın sebebi bilmemeniz mi yoksa kendiniz mi özellikle böyle yapmak istediniz? Eğer bilmediğiniz içinse yaptığınız yanlış demek istemiyorum ama daha doğru yolları var.

#2 Yanıt: Genel Tartışmalar » Resim silme » 16.08.2018 17:00:50

Kimse unlimited alan vermez, size söylemedikleri boyut ve dosya sayısı sınırları vardır. Onları geçtiğinizde hesabınızı durdururlar, o zaman haberiniz olur.

SoftDelete kullanmanın sakıncası sizin kayıtları nasıl ele aldığınız ve veritabanını nasıl kullandığınız ile ilgili. Veritabanında unique olan bir alan daha önce eklenmiş ama soft delete ile silinmiş bir kayıt tekrar eklenmeye çalışıldığında hata verecektir.

#3 Yanıt: Konu Dışı » Veritabanı tüm sütünlara default değer verme » 16.08.2018 16:56:24

Tüm sütunlara null vermenin sakıncası vardır. Şöyle ki veri eklerken null olmaması gereken bir alan null eklenirse haberiniz olmayacak demektir. Öteki türlü hata vereceği için haberiniz olacak ve ona göre işlem yaptıracaksınız. Ne kadar strict o kadar iyi.

#4 Yanıt: Laravel 5.x Yardım » Eticaret sitesi için » 15.08.2018 19:32:29

Açıkçası kullanın diye değil sadece inceleyip genel eticaret konspetleri hakkında bilgi sahibi olun diye sizi Sylius'a yönlendirdim. Laravel ile yazarken bazı sorularınıza cevap verecektir.

#5 Yanıt: Sürüm Duyuruları » Laravel 5.7 Sürümü Yayınlandı » 15.08.2018 00:45:57

Ben genellikle DI kullandığım için beni pek etkilemedi smile

#6 Yanıt: Laravel 5.x Yardım » Relation ile tabloya ulaşmak » 13.08.2018 10:16:56

Car ile Equipment arasında many-to-many ilişkisi kurdunuz:

// Car.php
public function equipments()
{
    return $this->belongsToMany(Equipment::class, 'digitalbrain_rentcar_equipment_car', 'car_id', 'equipment_id');
}

Equipment ile EquipmentCategory arasında da one-to-many ilişkisi kurdunuz:

// Equipment.php
public function category()
{
    return $this->belongsTo(EquipmentCategory::class, 'equipment_category_id');
}

// EquipmentCategory
public function equipments()
{
    return $this->hasMany(Equipment::class, 'equipment_category_id');
}

Bu durumda

@foreach($car->equipments as $equipment)
  <p>{{  $equipment->category->name}}</p>
@endforeach

şeklinde donanım kategorisine ulaşabiliyor olmalısınız. Elbette resimdeki gibi bir yapı için başka bir işlem yapmanız gerekecek:

$equipmentCategories = EquipmentCategory::with('equipments')->where('is_active',1)->orderBy('sort_order')->get();
$car = Car::with(['equipments','equipments.category'])->findOrFail(1);
@foreach($equipmentCategories as $category)
    @if($car->equipments->where('equipment_category_id',$category->id)->count())
        <h2>{{ $category->name }}</h2>
        <ul>
        @foreach($category->equipments as $equipment)
            @if($car->equipments->contains($equipment->id))
                <li>{{ $equipment->name }}</li>
            @endif
        @endforeach
        </ul>
    @endif
@endforeach

gibi yapılabilir. Test edemediğim için sorun çıkabilir.

#7 Yanıt: Laravel 5.x Yardım » Eticaret sitesi için » 13.08.2018 08:05:35

Sizinle daha önce de konuşmuştuk.SKU (Stock Keeping Unit) olayı var. Ürünün seçeneklerine göre kombinasyonun bulunup, her bir sonucun ayrı bir ürün olarak işlem görmesi. Örneğin 3 renk olsun, kırmızı/beyaz/siyah ve 3 tane de boy olsun M/L/XL diye. Bu durumda 9 çeşit ürün sunabilirsiniz. M Kırmızı, M Beyaz, M Siyah, L Kırmızı, L Beyaz... diye gidiyor. Bunlar ürün varyantları olmuş oluyor. Bu şekilde yaptığınızda her varyantın ayrı stok ve fiyat bilgisini veritabanında tutabiliyorsunuz. Böylece L Kırmızı 10 tane var, L Beyaz tükendi, XL Siyah 2 tane kaldı %10 indirimli... gibi işlemleri yapabiliyorsunuz. Bu konuyu araştırın.

Modern bir e-ticaret yazılımı nasıl olur diyorsanız (Symfony 4):
https://github.com/Sylius/Sylius

Demosu için:
https://sylius.com/demo/

Sylius'un demosuna bakarak da envanterin, özelliklerin vs nasıl ele alındığını görebilirsiniz.

#8 Yanıt: Laravel 5.x Yardım » Model ve Events Hk. » 10.08.2018 13:25:37

Öncelikle yaptığınız çok yanlış, böyle yapmayın.

Model eventları için:
https://laravel.com/docs/5.6/eloquent#events

Dökümanlarda yer almayan, inline diyebileceğimiz event kullanımı ise, yani model dosyanıza eklediğiniz, şu şekilde:

public static function boot()
{
    static::created(function($model) {
        // $model burada yeni oluşturulan instance
        // $ekleyen = $model->ekleyen_id
    });

    static::deleted(function($model) {
        // $model burada silinen instance
    });

    static::updated(function($model) {
        // $model burada güncellenen instance
        // Örneğin name alanı değişmişse
        // if($model->isDirty('name')) {
    });
  
    // ...

    parent::boot();
}

#9 Yanıt: Vuejs 2.x Yardım » Fark » 10.08.2018 11:57:20

Ben vue kullanmıyorum ama (öğreneceğiz bakalım) arada görüyorum, http şeklinde bir const tanımlayıp axios'u o şekilde içeri import ediyorlar, sonra http.post şeklinde kullanıyorlar. Sanırım vue-resource'dan geçiş yapanlar genellikle böyle kullanıyor ya da boşa post atıyorum smile

#10 Yanıt: Laravel 5.x Yardım » ajax pagination » 10.08.2018 09:24:19

Öyleyse siz sonucu sadece önbellekte değil oturum değişkeni olarak tutacaksınız.

$model = session($cacheKey) ?: $model->paginate(1);

#11 Yanıt: Laravel 5.x Yardım » ajax pagination » 10.08.2018 00:08:06

Diyelim ki kodların en altında pagination yaptığınız yerde şöyle yaptınız:

$model = Cache::rememberForever('model', function() use ($model) {
    return $model->paginate(1);
});

Güzel. Sonucu önbelleğe aldınız ama sorun var:
Önbellek verisi oluştuktan sonra aramayı kim kullanırsa kullansın (sonuçta oturum değil önbellek, tüm ziyaretçiler ortak kullanacak), hangi seçenekleri seçerse seçsin, hangi sayfaya bakarsa baksın (ki sayfalama zaten çalışmaz) hep ilk yapılan aramanın sonucunu getirecek. Bunun sebebi ne olursa olsun çıktıyı hep aynı önbellek anahtarı ile tutuyorsunuz, yani model.
Yani böyle olunca da hep ilk aramanın sonucu dönecek demektir.

Bu durumda size özel bir önbellek anahtarı lazım. Bu anahtarı da arama sonuçlarına ve sayfa numarasına göre yapmanız gerekiyor. Bu durumda şöyle yapabilirsiniz:

$model = Car::with(['location', 'rental_value', 'engine_volume', 'year']);

// Bu dizide, kullanılan tüm parametre değerlerini tutacağız.
$parameters = [];

// Önce sayfa numarası ile başlayalım:
// Sayfa değişkenini değiştirmediğinizi varsayıyorum, o yüzden page
if(request('page')) {
    $parameters[] = request('page');
}

// Sonra diğer filtre parametreleri
if (post('brand_id')) {
    $model = $model->where('brand_id', post('brand_id'));
    $parameters[] = post('brand_id');
}

if (post('mdl_id')) {
    $model = $model->where('mdl_id', post('mdl_id'));
    $parameters[] = post('mdl_id');
}

// ...
// Diğerlerini de bu şekilde yapıyoruz.
// ...

// Son aşamaya geldikten sonra özel keyimizi oluşturuyoruz:
$cacheKey = sha1(implode(',', $parameters));

// ve kullanıyoruz
$model = Cache::rememberForever($cacheKey, function() use ($model) {
    return $model->paginate(1);
});

Bu şekilde her arama olasılığı ve sayfa için özel bir key ve ona ait bir önbellek oluşacak. Bir başkası aynı aramayı yaparsa önbellekteki sonuçlar gelecek.

- Car modelinde bir değişiklik olduğunda bu önbelleği temizlemeniz gerekiyor.
- Ayrıca bu yöntem işin içinde böyle sabit parametreler değil de arama kelimeleri de varsa çalışmayacaktır.
- Profesyonel çözüm için ElasticSearch gibi arama motorlarlarından birini kullanmanız gerekiyor.

#12 Yanıt: Laravel 5.x Yardım » Laravel Routes anlamsız bir hata alıyorum. » 08.08.2018 13:20:56

Route::get('{section}/'.__('global.news_url').'/{slug}', '[email protected]')->name('newsDetails');

Burada __('global.news_url') kısmında translator yardımcı fonksiyonunu kullanmışsınız (Anladığım kadarı ile frontend.main. şeklinde bir de prefix var). Yani herhangi bir yerde route('frontend.main.newsDetails') kullandığınızda uygulamanın diline göre global.news_url gelecek ve dile göre rota oluşacak.

Bu durumda neden LaravelLocalization::getLocalizedURL() kullandınız? Ben bu paketi kullanmadım ama anladığım kadarıyla URL oluştururken /tr /en vs eklenmesini sağlıyor ama sizin rotada bu şekilde bir dil eklentisi yok. Sadece global yazıyor.

#13 Yanıt: Laravel 5.x Yardım » Multi İnput Form Submit » 08.08.2018 09:53:56

Bu hataya göre price değeri, tabloda yer alan price alan tipinin alabileceği en yüksek değerden büyük. Para ile ilgili alanlarda, tutar vs için ben genellikle DECIMAL(10,2) kullanıyorum.

#14 Yanıt: Laravel 5.x Yardım » Multi İnput Form Submit » 07.08.2018 16:51:56

Şu an deneme şansım yok ama $request->get("product_id.{$i}") kısımlarında hata olabilir. $request->get("product_id")[$i] şeklinde deneyin.

#15 Yanıt: Laravel 5.x Yardım » Multi İnput Form Submit » 07.08.2018 15:23:50

product_id, qty ve price dizi olduğu için döngü içerisinde Invoice oluşturmanız gerekiyor.

for($i=0; $i <= count($request->product_id); $i++) {
    Invoice::create([
        'company_id' => $request->company_id,
        'product_id' => $request->get("product_id.{$i}"),
        'qty' => $request->get("qty.{$i}"),
        'price' => $request->get("price.{$i}"),
    ]);
}

gibi...

#16 Yanıt: Laravel 5.x Yardım » Tc Kimlik Doğrulama Php » 07.08.2018 04:59:14

Hızlı ve kaba bir örnek hazırladım. Geliştirmesi size kalmış.

app klasörü içerisine Services isimli bir klasör oluşturun. İçerisine de TINVerification.php isimli bir dosya oluşturun. İçeriği:

<?php

namespace App\Services;

use SoapClient;

class TINVerification
{
    /**
     * @param array $data
     * @return bool
     */
    public function verify(array $data): bool
    {
        return (new SoapClient('https://tckimlik.nvi.gov.tr/Service/KPSPublic.asmx?WSDL'))
            ->TCKimlikNoDogrula($data)
            ->TCKimlikNoDogrulaResult;
    }
}

Daha sonra herhangi bir yöntem içerisinde kullanabilirsiniz. Örneğin:

public function store(TINVerification $TINVerification)
{
    // ...
    $result = $TINVerification->verify([
        "TCKimlikNo" => "11111111111",
        "Ad" => "MEHMET",
        "Soyad" => "DEMİR",
        "DogumYili" => "1970"
    ]);
}

#17 Yanıt: Genel Tartışmalar » Rentacar veritabanı nasıl olmalı » 30.07.2018 11:12:20

Örnekte elle girilecek şekilde yapılmış. Siz değiştirin onu. Dediğiniz gibi marka ve modeller için tablo oluşturacaksınız, makes ve brands gibi, car tablosunda da brand_id, make_id şeklinde iki alan ekleyeceksiniz. Bunların modelleri de Car, Make ve Brand olsun, aralarında one-to-many(belongsTo/hasMany) ilişkisi kuracaksınız.

// Car.php
public function make()
{
    return $this->belongsTo(Make::class, 'make_id');
}
public function brand()
{
    return $this->belongsTo(Brand::class, 'brand_id');
}
public function equipments()
{
    return $this->belongsToMany(Equipment::class, 'car_equipment', 'car_id', 'equipment_id');
}

// Make.php
public function cars()
{
    return $this->hasMany(Car::class, 'make_id');
}
public function brands()
{
    return $this->hasMany(Brand::class, 'make_id');
}

// Brand.php
public function cars()
{
    return $this->hasMany(Car::class, 'brand_id');
}
public function make()
{
    return $this->belongsTo(Make::class, 'make_id');
}

...
böyle gidiyor.

#18 Yanıt: Genel Tartışmalar » Rentacar veritabanı nasıl olmalı » 29.07.2018 23:04:54

Örnekdeki şemayı inceledim, özel bir şeyler yoksa gayet yeterli duruyor. one-to-many ve many-to-many ilişkilerle kolaylıkla yapılabilir.

Dışarıdan kullanıcı dediğiniz nedir? Sonuçta arabayı kiralayan birileri, kişi ya da firma, olmak zorunda ve rental tablosunda customer_id kısmında id'si yer almak zorunda. users tablosuna guest diye bir alan ekleyin, 0-1 değeri tutacak şekilde, sisteme eklenmemiş kullanıcılar ilk araç kiralama işleminde temel bilgilerle üye olsunlar, üye olurlarken guest alanını 1 olarak ekletin.

Eğer bahsettiğiniz dışarıdan kullanıcıların da araba ekleyip kiralamaya açabilecekleri ise car tablosuna bir owner_id eklersiniz. Arabalar bize ait - dışarıdan eklenmiş gibi ayrılacaksa foreign_property diye bir alan eklersiniz. Bu şekilde modifiyelerle istediğinizi yapabileceğinizi düşünüyorum.

#19 Yanıt: Laravel 5.x Yardım » AuthCheck middleware hatası » 28.07.2018 21:39:05

$middlewareGroups içerisine değil $routeMiddleware içerisine koyacaksınız.

Ayrıca bu işi yapan bir middleware Laravel içerisinde guest isimli mevcut:
app/Http/Middleware/RedirectIfAuthenticated.php

Kendi Auth sisteminizi mi yazmaya çalışıyorsunuz?

#20 Yanıt: Genel Tartışmalar » Laravel Nova » 26.07.2018 17:11:25

Sorun yok. Herkes aynı şeyi söyler bana ama benim de emin olun geçerli sebeplerim var. Biraz daha idare etmem lazım sadece. smile

#21 Yanıt: Genel Tartışmalar » Laravel Nova » 26.07.2018 16:37:41

Benim repolar Bitbucket'da, private, ücretsiz olunca orada tutma kararı almıştım (amma beleşçiymişim ben de smile). Birkaç yaptığım bir şey vardı Github'da yayınlamak istediğim, zaman olmadı, isteğim kaçtı vs.

Ya işte durumlar iyi olmayınca bazı şeylere insan mecbur kalıyor. Krediler, kiralar kolay ödenmiyor bu ülkede. Kendimizi toparlarsak bizim de planlarımız var elbette smile

#22 Yanıt: Genel Tartışmalar » Laravel Nova » 26.07.2018 14:03:24

Ben self-hosted bir şeyler olacağını öğrenince paralı olmaz, ücretsiz open source olur düşünmüştüm, bir an belki standart işlerde iskelet olarak kullanabilirim demiştim ama paralı geldi. Zaten komple admin paneli değil, boilerplate.

Ben her işte oturup farklı bir sistem yazmıyorum açıkçası, nadiren farklı işeyler geliyor. Gelen işlerin çoğu kurumsal siteler. Çoğu kişinin Wordpress kurup geçtiği siteler. Ben kendime uzun zamandır böyle bir boilerplate yazmayı istiyordum, mevcut elimdekinden daha modern, webpack ile paketlenmiş bir sistem. En azından panelin arayüzü, çok dilli içerik altyapısı, kullanıcı yönetimi, rol-yetki, şifre işlemleri, medya kütüphanesi... gibi ortak kısımlar hazır olacaktı.

Böyle bir sistemi zaten yıllarca defalarca yazdım. Laravel kullanarak, Slim kullanarak, FuelPHP kullanarak, CodeIgniter ile, vanilla PHP ile... Symfony ile yazmaya başladım, 4.ün haberi gelince yarıda kaldı vs... Beni sadece Nova'nın resmi olması cezbetti. Laravel ile birlikte o da güncellenecekti, beni güncelleme derdinden kurtaracaktı.

Sağlık olsun smile ama en azından böyle bir sistemi artık yazmak için bana biraz da motivasyon kaynağı oldu yani. Elimdeki eski, güncellemeye üşeniyorum smile

Wordpress'in 1.x sürümünü fln kurduğumu hatırlıyorum, oldum olası gıcık kaptım şu Wordpress'ten ama 150 TL hazır tema alıp 4-5 bin'e satan insanlar biliyorum, üstelik ayda 4-5 tane, zoruma gidiyor. Aradaki farkı kapatmam lazım. Yani kısacası benim için Nova, Taylor, Laravel vs Symfony, PHP vs Python vs Go vs... yok PARA var, biz gülen Atatürk'çüyüz big_smile

#23 Yanıt: Genel Tartışmalar » Laravel Nova » 26.07.2018 11:28:45

Güzel. Benim için sürekli güncel tutulan bir kontrol paneli ama site başı fiyat alınması, özellikle de türk lirasının değer kaybettiği şu günlerde bana cazip gelmedi. $99 tek sefer ödüyorsun, istediğin kadar site kurabiliyorsun deseydi belki.

Özellikleri tamamen ortaya çıksın, bir deneyelim, sonra tekrar konuşuruz. Şu an erken diye düşünüyorum.

#24 Yanıt: Genel Tartışmalar » Laravel Nova » 26.07.2018 02:24:16

Laravel Nova

Laravel için geliştirilmiş, tamamen modifiye edilebilir, mevcut projelere composer ile eklenebilir bir admin paneli.
Frontend olarak Vue.js ve Tailwind kullanıyor.
Kaynak yönetimi, işlem, arama, filtreleme, istatistik ve kullanıcı yönetimi gibi özellikleri var.
Bir çok şey arayüz üzerinden yapılabiliyor ve tanımlanabiliyor.
Sanırım Laravel Voyager tarzı bir şey olacak. Mutlaka onu geçecek özellikleri olacaktır.

Bireysel kullanıcılar için $99, kurumsal firmalar için ise $199 lisans ücreti olacak ve gelecek ay yayınlanacak. Bu fiyatlar site başı alınacak fiyatlar.

Ayrıntılar belli olsun, ayrıca bir konu açıp üzerinde konuşacağız. Özellikle site başı 480 TL / 955 TL vermeye değer mi değmez mi konusunda.

#25 Yanıt: Laravel 5.x Yardım » Breadcrumb ve Kategorileme yapısında destek arıyorum » 25.07.2018 14:10:38

Bu şekilde yapmak yerine şöyle bir rota ile yapabilirsiniz:

Route::get('kategori/{slug}', function($slug)
{
	// Tüm slug parçaları, dizi olarak
	$slugs = explode('/', $slug);

	// Son slug
	// /kategori/bilgisayar/oyuncu-bilgisayarlari/masaustu-bilgisayarlar şeklinde olursa $last değeri masaustu-bilgisayarlar olmuş oluyor.
	$last = end($slugs);

	// Slug sayısı. Bazı işlemler için kullanabilirsiniz
	$slugCount = count($slugs);

	// Üstteki bilgi ve başka şartlara göre artık işlemin devamını getirebilirsiniz...

})->where('slug', '(.*)?');

Bu rota aşağıdaki tüm linkleri yakalar:

kategori/bilgisayar
kategori/bilgisayar/oyuncu-bilgisayarlari
kategori/bilgisayar/oyuncu-bilgisayarlari/masaustu-bilgisayarlar

Kalın yazdığım yerler ise $slug değeri, yani seçili kategori, slug üzerinden kategoriye ulaşabilirsiniz.

Bu yazdığımı controller ilerisinde yapmanız daha uygun olur:

Route::get('kategori/{slug}')->uses('[email protected]')->where('slug', '(.*)?');
// CategoryController.php
public function index($slug)
{
    $slugs = explode('/', $slug);
    $last = end($slugs);

    $category = Category::where('slug', $last)->firstOrFail();

    return view('categories.index', compact('category'));
}

gibi...

Forum alt kısmı

Uygulama FluxBB