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 » DB'deki table'da datalarin ID'lerini kullanmak » Bugün 14:03:23

Ben de bir şey ekleyeyim: find, first gibi yöntemler her zaman tek kayıt dönderir, o yüzden dönen kayıt direk istediğiniz kayıt olduğu için onu foreach ile döngüye sokmazsınız.

Bu yöntemleri kullandığınızda kayıt bulunamadığı taktirde aldığınız sonuç null olacaktır ama örneğin get ile aldığınız sonuç boş olursa null yerine boş bir Collection/array alırsınız.
Bu durumda get ile dönen sonuçlara boş bile olsa foreach uygulayabilirsiniz ama null gelen bir sonuca foreach uygularsanız Invalid argument supplied for foreach() uyarısı alırsınız. Sistemi de otomatik test yerine elle test ederken genellikle hep kayıt gelecek şekilde insanlar test ettiği için bu gözlerinden kaçabilir, production ortamında hata alırlar.

Bunu yazmamın sebebi üstte

$estates = allestates::findOrFail($id);

ile çekilen kayda şablon içerisinde foreach uygulamışsınız. Her ne kadar ModelNotFoundException fırlatıp işlemi kesecek olsa da belirtmek istedim.

#2 Yanıt: Laravel 5.x Yardım » Route yapıları Service unavailable veriyor. » Dün 03:17:22

artisan serve PHP ile birlikte gelen web sunucusunu kullanmanızı sağlıyor. Apache ya da Nginx gibi bir sunucu varsa elbette ona gerek yok. Sunucu arkaplanda çalışıyorsa siteniz çalışacaktır. Virtual host olarak kullanıyorum demişsiniz ama Apache Virtual Host gibi web sunucusunda mı yoksa hosts dosyama 127.0.0.1 ile geçici alan adını işledim şeklinde mi belirtmemişsiniz o yüzden gerçek bir web sunucusu yüklümü bilmiyorum. Yoksa yükleyeceksiniz çünkü PHP ile gelen sunucu gelişmiş bir sunucu değil, sadece hızlıca bir gözatmanızı sağlar.

Laravel, uygulamayı bakım moduna alınca da 503 Service Unavailable mesajı verir. php artisan down şeklinde uygulamayı geçici olarak bakım moduna alıp erişimi engelliyoruz. Bu komut storage/framework içerisine down diye bir dosya atıyor. Her ihtimale karşı oraya girip bir bakın, down diye dosya varsa onu silip deneyin.

503 Service Unavailable hatasının açıklamasına bakarsanız eğer "Sunucu geçici olarak isteği yerine getiremiyor. Bunun sebebi aşırı yükleme ya da bakım modu olabilir" şeklinde olduğunu görürsünüz. Sizinkinin sorunu bakım modu değilse aşırı yükleme olabilir, yani yazılan kodla alakalı. Şimdi ama artisan serve ile çalışıyor diyebilirsiniz. Daha önce dediğim gibi PHP ile birlikte gelen yerleşik sunucu gelişmiş olmadığı için o hatayı almanıza engel oluyor olabilir. PHP ile gelen aynı anda birden fazla isteği işleyemez, Apache vs işler, o yüzden.

Hata loglarına bakmak da size cevabı ya da bir ipucu verebilir.

Ya da "arkadaşlar şuraya fazladan boşluk koymuşum ondanmış, siz abartmışsınız, teşekkürler" gibi şu sıralar çok aldığım bir cevap da verebilirsiniz.

#3 Yanıt: Laravel 5.x Yardım » Özel tasarım hakkında » 17.10.2018 02:21:50

Şunu da inceleyebilirsiniz:
http://fabricjs.com/

Verdiği JSON çıktı ve TCPDF gibi bir kütüphane ile pixel -> point dönüşümü yaptırılarak güzel sonuçlar elde edilebilir. Kodları biraz inceledim, sanırım object oluştururken ona özel bir property verebilirsiniz. Örneğin placeholder gibi. Bunu da JSON çıktıya dahil ediyor.
Örneğin bir kutu ekleyip ona rect.placeholder='CUSTOMER_NAME'; dedikten sonra JSON çıktıyı PHP ile işlerken CUSTOMER_NAME yazan yeri veritabanından gelen müşteri adı ile değiştirerek PDF'ye işletirsiniz. Teorik konuşuyorum elbette, pratikte bu kadar kolay olmayabilir.

#4 Yanıt: Laravel 5.x Yardım » Laravel pagination sorunu » 16.10.2018 17:24:57

Ben neden LengthAwarePaginator kullandığınızı anlamadım açıkçası. Sonuçta Builder kullanıyorsunuz. Yukarıdaki kod aslında şu yani hepsi:

$q = $request->q;

$estates = \DB::table('allestates')
                ->where("building_name","LIKE", "%" . $q . "%")
                ->orWhere("address","LIKE", "%" . $q . "%")
                ->orWhere("company_name","LIKE", "%" . $q . "%")
                ->orWhere("region","LIKE", "%" . $q . "%")
                ->orderBy('price')->paginate(10);

return view("search", compact('estates','q'));

search.blade.php içerisinde de:

@if(count($estates))
    @foreach($estates as $estate)
        <!-- ... -->
    @endforeach
    {{ $estates ->appends(['q' => $q])->links() }}
@else
    <div class="alert">
        Not found!
    </div>
@endif

Biz LengthAwarePaginator'ı manuel oluşturduğumuz collection/array için kullanıyoruz.

#5 Yanıt: Laravel 5.x Yardım » groupBy, max sorgusu » 16.10.2018 13:26:34

Laravel'in kendi dökümanlarına bakarsanız çok araştırmanıza gerek kalmaz:
https://laravel.com/docs/5.7/database
https://laravel.com/docs/5.7/queries

#6 Yanıt: Laravel 5.x Yardım » Laravel pagination sorunu » 16.10.2018 13:24:09

1. Sorun
Büyük ihtimalle q parametresini sayfalama linkleri ile göndermiyorsunuz. Şu şekilde yapacaksınız:

{{ $estates ->appends(['q' => request('q')])->links() }}

2. Sorun
Sayfalamanın linkleri standart olarak Bootstrap 4'e uygun olarak gelir. Bootstrap 4 kullanmıyorsanız CSS ile kendiniz stil vermeniz gerekiyor. Bootstrap 4 ile gelen stil şu şekilde:

.pagination {
  display: -ms-flexbox;
  display: flex;
  padding-left: 0;
  list-style: none;
  border-radius: 0.25rem;
}

.page-link {
  position: relative;
  display: block;
  padding: 0.5rem 0.75rem;
  margin-left: -1px;
  line-height: 1.25;
  color: #007bff;
  background-color: #fff;
  border: 1px solid #dee2e6;
}

.page-link:hover {
  z-index: 2;
  color: #0056b3;
  text-decoration: none;
  background-color: #e9ecef;
  border-color: #dee2e6;
}

.page-link:focus {
  z-index: 2;
  outline: 0;
  box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, 0.25);
}

.page-link:not(:disabled):not(.disabled) {
  cursor: pointer;
}

.page-item:first-child .page-link {
  margin-left: 0;
  border-top-left-radius: 0.25rem;
  border-bottom-left-radius: 0.25rem;
}

.page-item:last-child .page-link {
  border-top-right-radius: 0.25rem;
  border-bottom-right-radius: 0.25rem;
}

.page-item.active .page-link {
  z-index: 1;
  color: #fff;
  background-color: #007bff;
  border-color: #007bff;
}

.page-item.disabled .page-link {
  color: #6c757d;
  pointer-events: none;
  cursor: auto;
  background-color: #fff;
  border-color: #dee2e6;
}

.pagination-lg .page-link {
  padding: 0.75rem 1.5rem;
  font-size: 1.25rem;
  line-height: 1.5;
}

.pagination-lg .page-item:first-child .page-link {
  border-top-left-radius: 0.3rem;
  border-bottom-left-radius: 0.3rem;
}

.pagination-lg .page-item:last-child .page-link {
  border-top-right-radius: 0.3rem;
  border-bottom-right-radius: 0.3rem;
}

.pagination-sm .page-link {
  padding: 0.25rem 0.5rem;
  font-size: 0.875rem;
  line-height: 1.5;
}

.pagination-sm .page-item:first-child .page-link {
  border-top-left-radius: 0.2rem;
  border-bottom-left-radius: 0.2rem;
}

.pagination-sm .page-item:last-child .page-link {
  border-top-right-radius: 0.2rem;
  border-bottom-right-radius: 0.2rem;
}

#7 Yanıt: Laravel 5.x Yardım » Özel tasarım hakkında » 16.10.2018 10:52:38

Kolay yol:
İhtiyaca göre birkaç çeşit fatura şablonu hazırlayıp bunu kullanıcının seçmesini sağlayabilirsiniz. Fatura oluşturmadan önce şablonu seçer: A4, Yırtmalı, A5 Kompakt vs. Fatura seçilen şablona göre oluşur. Bunları da resources/views/invoices içerisinde a4.blade.php, continuous.blade.php, a5.blade.php gibi tutarsınız ya da pdf oluşturuyorsanız pdf şablonları hazırlarsınız. İhtiyaca göre sayısını arttırırsınız.

Zor yol:
Wordpress'deki shortcodes mantığı, drag-n-drop placeholder ve etkileşimli bir arayüz ya da dinamik bir form ile kullanıcı kendi faturasını tasarlar.

#8 Yanıt: Laravel 5.x Yardım » Auth u bozmadan 4 dashboard » 16.10.2018 00:49:24

Dediğiniz de bir yol ama kullanıcıya birden fazla rol vermeniz gerekirse veremezsiniz. En iyisi spatie/laravel-permission kullanmak. İleride başka şeyler de isteyebilirler:
https://github.com/spatie/laravel-permission

#10 Yanıt: Laravel 5.x Yardım » Boş Alanlar İçin Mail » 12.10.2018 17:11:05

Dizi olduğu için öyle olmaz. Şimdi sizin Request ile gelen alanlarınız var ve içerisinde belli olan bazıları boş ise onlarla ilgili mail atmak istiyorsunuz.

// Boş olursa mail gönderilecek alanlar
$required = $request->only(['alan1','alan2','alan3']);

// Bunlardan dolu olanlar
$filled = array_filter($required);

// Boş olan alanlar
$empty = array_diff($required, $filled);

if(count($empty)) {
    // Boş alan var, bunlar $empty dizisi içerisindeki alanlar.
    // Burada $empty dizisini içeri alan bir event ateşletebilirsiniz mesela, onu dinleyen bir listener da maili gönderir.
}

#11 Yanıt: Genel Tartışmalar » Request Entity Too Large Hatası » 12.10.2018 14:05:26

post_max_size ile panelde görülen değer neden farklı? Birden fazla php.ini olabilir, doğru olana baktığınıza emin olun.

Bir de mod_security ile alakalı olabilir. Daha önce mod_security kurulu olan bir serverda post filtrelenme olayı ile karşılaşmıştım, htaccess ile iptal etmiştim.

#12 Yanıt: Genel Tartışmalar » Request Entity Too Large Hatası » 12.10.2018 13:13:22

php.ini içerisinde bir de post_max_size değeri var.

#13 Yanıt: Laravel 5.x Yardım » Aynı Ürünü Birden Fazla Kategoride Göstermek Ve Bunu Görüntülemek. » 11.10.2018 15:40:23

Nereden aldınız mı derken siz mi yazdınız yoksa başka birinin yaptığı bir şey mi diye sordum. İstediğiniz şeyi size anlatabilmem için oturup burada Laravel öğretmem lazım. Ayrıca proje bunu desteklemiyorsa bir çok yerde, veritabanı da dahil, değişiklik yapılması gerekecek.
Ne yazık ki istediğiniz, Laravel gibi rapid bazlı bir frameworkde bile anlatması zor bir olay, temelleri bilmeniz gerekiyor. Burada kendi projelerini geliştiren, temelleri bilen arkadaşlar için bile bazı sorulara cevap hazırlamam bir kaç saatimi alıyor.
İstediğiniz şey Laravel ya da PHP dışında ayrıca genel bir yaklaşım (bir ürünün birden fazla kategoriye ait olması). Bunu bir programlama dili ile uygulayabilmeniz için yaklaşımı da bilmeniz gerekiyor.

Bana göre seçenekleriniz:
1. Ben sadece bu istediğim yeter, başka bir şey istemiyorum diyorsanız;
    a) Yapan kişiye ulaşmaya çalışmak
    b) Laravel ile benzer iş yapmış ya da yapabilirim diyen birine yaptırmak
2. Öğrenmek istiyorum diyorsanız dökümanlardan ve bu forumdan faydalanarak adım adım öğrenmek

#14 Yanıt: Laravel 5.x Yardım » excel dosyasını view içerisinde göstermek » 11.10.2018 10:39:30

Ben Google Docs'un embed özelliğini kullanarak iframe içerisinde gösterilmesini sağlıyordum. Onun dışında native bir yol olduğunu sanmıyorum. En basitinden bilgisayarda bir şeylerin kurulu olmasını isteyecektir. Eskiden ActiveX ile yapılan şeyler gibi. Ya da interaktif olmayacaksa HTML ya da PDF e de çevrilebilir.

Açıkçası sadece üyeler görebilsin gibi bir şey istemişlerdi ben de dosyayı bir düğme aracılığı ile üyenin mail adresine gönderilmesini sağlamıştım.

#15 Yanıt: Laravel 5.x Yardım » Boş Alanlar İçin Mail » 11.10.2018 10:32:17

Ben olsam bir dizi oluştururdum:

$required = [
    'alan1' => 'Alan 1',
    'alan2' => 'Alan 2',
    'alan3' => 'Alan 3'
];

En son bu alanları kontrol ettirip hangileri boş kalmış ise tek bir mail ile işi hallederdim: Merhaba şu alanları boş bıraktınız: Alan 1, Alan 2...

#17 Yanıt: Laravel 5.x Yardım » Aynı Ürünü Birden Fazla Kategoride Göstermek Ve Bunu Görüntülemek. » 10.10.2018 14:30:21

Bir ürünü birden fazla kategoride tutabileceğiniz bir veritabanı dizaynına sahip misiniz?

Hayır ise (yani ürün tablosunda category_id diye bir alanda tek bir kategori id'si tutuyorsanız):
Ortanca bir tablonuz olmalı. Bu tabloda iki alan olacak; product_id ve category_id. Ürün kategorilerini bu tabloda tutacaksınız:

+------------+-------------+
| product_id | category_id |
+------------+-------------+
|          2 |           5 |
|          2 |           6 |
|          2 |           7 |
+------------+-------------+

Bu tabloya göre id'si 2 olan ürün id'si 5,6 ve 7 olan kategoriye ait.  Bu ilişki Eloquent'de many-to-many/belongsToMany olarak geçmekte:
https://laravel.com/docs/5.7/eloquent-r … ny-to-many

Evet ise (tablonuz var ve Product ile Category modeli arasında gerekli ilişkileri kurdunuz):
Gördüğüm kadarıyla select2 kullanıyorsunuz. select2'nin multiple özelliği ile birden fazla kategori seçebilirsiniz:
https://select2.org/getting-started/bas … es-pillbox

multiple ile kategori id'leri içeren bir dizi alırsınız [5,6,7] şeklinde. many-to-many ilişkisinde bunları rahatlıkla ortanca tabloya eklemenize yarayacak olan attach, detach, sync yöntemleri mevcut:
https://laravel.com/docs/5.7/eloquent-r … ationships

Yol göstereceğini düşünüyorum, iyi okumalar.

#18 Yanıt: Laravel 5.x Yardım » Digitalocean subdomainde laravel kurulumu » 10.10.2018 13:37:47

DigitalOcean'da bunları anlatan yazılar var. Örneğin:

Apache, PHP, MySQL üçlüsü olan LAMP kurulumu:
https://www.digitalocean.com/community/ … untu-16-04

Webmin kontrol paneli kurulumu:
https://www.digitalocean.com/community/ … untu-16-04

Sonra alt domain, birden fazla site vs için virtual host (Kontrol paneli kurarsanız içerisinde bunun için bir arayüz olabilir):
https://www.digitalocean.com/community/ … untu-16-04

Redis:
https://www.digitalocean.com/community/ … untu-16-04

Supervisor:
https://www.digitalocean.com/community/ … debian-vps

#19 Yanıt: Laravel 5.x Yardım » Proje testi » 08.10.2018 00:07:09

Cidden buraya hiç bakmadınız mı?:
https://laravel.com/docs/5.7/testing

Forumdaki arkadaşlar dökümanlara bakmayarak çok şey kaçırıyorlar. En azından başlıklara bakın.

#20 Yanıt: Laravel 5.x Yardım » nohup php artisan command » 05.10.2018 15:27:12

Bunun için genellikle Supervisor kullanıyoruz. Laravel ayrıca dökümanlarda da tavsiye etmektedir:
http://supervisord.org/
https://laravel.com/docs/5.7/queues#sup … figuration

#21 Yanıt: Genel Tartışmalar » Row Level Security (Satır Bazında Güvenlik) » 05.10.2018 03:45:41

Performans için yetkileri kalıcı olarak (rememberForever) önbellekte tutacaksınız. Cache tagging özelliği ile de işaretleyin. Yetkilerde bir değişiklik meydana geldi mi önbelleği baştan oluşturun. Cache tagging yardımı ile sadece değişiklik olan kısımları baştan oluşturmanız ekstra bir performans artışı sağlayacaktır.

Örneğin kullanıcının pages isimli bir tabloda düzenlemeye yetkili olduğu sayfalar olsun. Bu sayfa-kullanıcı ilişkisini de ayrı bir ortanca tabloda tutun. Örneğin:

+---------+------------+----------+-----------+
| user_id | allowed_to |  model   | record_id |
+---------+------------+----------+-----------+
|       1 | update     | App\Page |         3 |
|       2 | update     | App\Page |         3 |
|       1 | update     | App\Page |         4 |
+---------+------------+----------+-----------+

gibi. Tablo yapısı, ekstra tablo sayısı ve bu tablolar arasındaki ilişkiler vs sizin bu sistemi ne kadar dinamik yapacağınıza göre değişecektir. Bu üstteki basit bir örnek.

Buna bir de PagePolicy şeklinde bir policy hazırladığınızı düşünün. Bu yetkiler verilirken yetkiyi önbelleğe alacaksınız. Örneğin üstteki tabloya göre id'si 3 olan Page, id'leri 1 ve 2 olan User tarafından güncellenebilir.
Bu durumda bunu önbelleğe aldığımızı düşünürsek:

Cache::tags(['perms','pages','update','page_id:3'])->rememberForever('perms_pages_update_page_id:3', function() {
    return DB::table('perms')->where('record_id',3)->where('model', \App\Page::class)->pluck('user_id'); // [1,2]
});

Bunu da policy içerisinde

class PagePolicy
{
    public function update(User $user, Page $page)
    {
        $users = cache()->get("perms_pages_update_page_id:{$page->id}");
        return in_array($user->id, $users);
    }
}

şeklinde kullanabiliriz.

Birçok şey, kolayca yapılabilir kısacası.

#22 Yanıt: Laravel 5.x Yardım » sql sorgu » 04.10.2018 12:00:11

Oradaki search alanı Full-Text Index olarak adlandırılır. Tabloyu elle oluşturduysanız bu indexi de elle oluşturabilirsiniz. Zaten düz SQL cümlesi:

ALTER TABLE siteler ADD FULLTEXT search(site_url, site_adi, site_tanitimi, keywords);

yani örneğin phpMyAdmin varsa orada sorgu kutusuna yazıp çalıştırmanız yeterli.

Diğer isteğinize gelirse;
Bu şekilde bir arama yaptığınızı düşünün. Portakal diye arattınız, size 10 tane sonuç getirdi. En üstteki ilk sonuç portakal ile en alakalı sonuç olacaktır, yani reklamını göstermek istediğimiz sonuç.
Sizin sistemi bilmiyorum, reklamlar nereden geliyor vs. ama ben olsam reklamları site_id şeklinde bir foreign key ile ayrı bir tabloda tutardım. İlk sonucun id'sinden reklamlar tablosuna erişip o site_id'sine sahip reklam varsa gösterirdim.
Yani basit one-to-many/hasMany ilişkisi ile sitenin reklamlarından ilk olana ya da aktif olana ulaşırdım.

Yani bir çok şey yapılabilir.

#23 Yanıt: Laravel 5.x Yardım » sql sorgu » 04.10.2018 10:50:10

Benim kullandığım yol ise MySQL Full-Text Search. Herhangi bir tabloya eklemek için migrasyona (ya da migrasyon varsa ayrı bir migrasyonla) şöyle ekleyebilirsiniz:

DB::statement('ALTER TABLE siteler ADD FULLTEXT search(site_url, site_adi, site_tanitimi, keywords)');

Daha sonra arama yapmak için örneğin

// Arama kelime(leri)
$q = $request->get('q');

// Kelimeleri parçalayalım
$words = explode(' ', $q);

// Tekrar eden kelimeleri temizleyelim
$words = array_unique(array_filter($words));

// Her kelimenin başına + ekleyelim (Full-Text arama operatörü)
$words = '+' . implode(' +', $words);

$result = Siteler::with('kategories')
                ->whereRaw("MATCH(site_url, site_adi, site_tanitimi, keywords) AGAINST(? IN BOOLEAN MODE)", [$words])
                ->selectRaw("MATCH(site_url, site_adi, site_tanitimi, keywords) AGAINST (?) as relevance", [$q])
                ->orderBy('relevance', 'DESC')
                ->paginate(5);

Bunun hız, daha isabetli sonuçlar elde etme ve bunun gibi birçok avantajı var.

Örneğin üstte selectRaw("MATCH(site_url, site_adi, site_tanitimi, keywords) AGAINST (?) as relevance", [$q]) kısmında relevance alanı size bir float değer veriyor ve bu aranan kelimelere göre sonucun ne kadar isabetli olduğunu gösteriyor.
Bu değer ne kadar yüksek ise arama kelimeleri ile sonuç o kadar alakalı demektir. Ben onu kullanarak DESC ile tersten sıraladığım için en alakalı sonuçlar en önde çıkıyor.
Doğal olarak aradığım bir kelime bir içerikte 10 kere diğerinde 5 kere geçiyorsa 10 kere geçeni önce görmek isterim.

Arama modları, arama operatörler vs için:
https://dev.mysql.com/doc/refman/5.7/en … earch.html

Bu da burada dursun, biri sorarsa bu posta link veririm artık smile

#24 Yanıt: Laravel 5.x Yardım » Database'e json_encode ettigimiz veriyi View Blade'de decode etmek » 04.10.2018 09:22:22

Kullanacaksanız da şu şekilde:

@php
$links = json_decode($estate->link); 
@endphp

{{-- ya da --}}

@php($links = json_decode($estate->link))

#25 Yanıt: Laravel 5.x Yardım » Laravel Tek Satıra Join » 03.10.2018 16:51:06

Join için limit belirlemezsiniz, limiti tüm sorgu için belirlersiniz. Yani sorgu bitmeden ->limit(1)->get() gibi bitirmeniz gerekiyor. Öteki türlü bir limit belirleme olacaksa iç içe select (subselect) yazıyorsunuz (ya da yazmanız gerekiyor) demektir.

Forum alt kısmı

Uygulama FluxBB