Giriş yapmadınız.

#1 17.05.2015 11:37:36

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,664
Website

Mutator problemi

Merhaba

Ne zamandır laravel ile ilgilenemiyordum, bugün uğraşırken şöyle bir şey ile karşılaştım:

<?php namespace App;

use Request;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class Subscriber extends Model {
    
    protected $table = 'subscribers';

    protected $guarded = ['_token','g-recaptcha-response'];

    public function setCodeAttribute($value)
    {
        $this->attributes['code'] = Str::random();
    }

    public function setIpAttribute($value)
    {
        $this->attributes['ip'] = Request::getClientIp();
    }

}
/**
     * Subscribe
     *
     * @param SubscribeRequest $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function postIndex(SubscribeRequest $request)
    {
        Subscriber::create($request->all());

        return redirect()->back()->with('success','Kaydınız alındı, ilgilendiğiniz için teşekkür ederiz');

    }

Tablomda code ve ip isimli iki tane alan var. Accessor ve mutator sürekli kullandığım şeyler ama bu ikisi nedense çalışmıyor, tabloya eklemiyor. Sorun ne olabilir acaba? Şimdilik model event ile hallettim ama bunlar böyle kullanılmıyor muydu?

Son düzenleyen mgsmus (17.05.2015 11:38:01)

Çevrimdışı

#2 17.05.2015 11:43:56

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,664
Website

Yanıt: Mutator problemi

Boş dahi olsa diğer data ile göndermek gerekiyormuş smile

Çevrimdışı

#3 17.05.2015 13:08:56

angelside
Üye
Kayıtlı: 26.12.2012
Mesajlar: 195
Website

Yanıt: Mutator problemi

Event dışında sadece aşağıdaki yöntem ile sokabildim ip adresini. Mass assignment ve manul Model::create() ile sokamadım.

$subscriber = new Subscriber;
$subscriber->ip = $request->Ip();
$subscriber->code = Str::random();
$subscriber->save();

http://urltara.com - Aynı ip üzerinde olan diğer siteler ?

Çevrimdışı

#4 17.05.2015 13:19:54

Cavid
Üye
Yer: Baku
Kayıtlı: 01.03.2015
Mesajlar: 31
Website

Yanıt: Mutator problemi

her zaman yaptığım hata return etmemişsin smile

Son düzenleyen Cavid (17.05.2015 13:21:51)


Öğren öğren bitmiyor. hmm

Çevrimdışı

#5 17.05.2015 19:36:51

mgsmus
Moderatör
Yer: Mersin
Kayıtlı: 17.08.2013
Mesajlar: 1,664
Website

Yanıt: Mutator problemi

$input = $request->all();
$input['ip'] = $input['code'] = null;
Subscriber::create($input);

şeklinde halletmiştim ama SubscribeRequest  içerisinde şu şekilde de yapmak daha "cool"

public function all()
{
    $input= parent::all();
    $input['ip'] = $this->getClientIp();
    $input['code'] = \Str::random();
    return $input;
}

Elbette bu Request sadece frontend için, o yüzden edit yok.

Son düzenleyen mgsmus (17.05.2015 19:49:00)

Çevrimdışı

#6 17.05.2015 21:39:54

MURATSPLAT
Yönetici
Yer: Antalya
Kayıtlı: 06.05.2014
Mesajlar: 642
Website

Yanıt: Mutator problemi

mgsmus yazdı:

Merhaba

Ne zamandır laravel ile ilgilenemiyordum, bugün uğraşırken şöyle bir şey ile karşılaştım:

<?php namespace App;

use Request;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class Subscriber extends Model {
    
    protected $table = 'subscribers';

    protected $guarded = ['_token','g-recaptcha-response'];

    public function setCodeAttribute($value)
    {
        $this->attributes['code'] = Str::random();
    }

    public function setIpAttribute($value)
    {
        $this->attributes['ip'] = Request::getClientIp();
    }

}
/**
     * Subscribe
     *
     * @param SubscribeRequest $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function postIndex(SubscribeRequest $request)
    {
        Subscriber::create($request->all());

        return redirect()->back()->with('success','Kaydınız alındı, ilgilendiğiniz için teşekkür ederiz');

    }

Tablomda code ve ip isimli iki tane alan var. Accessor ve mutator sürekli kullandığım şeyler ama bu ikisi nedense çalışmıyor, tabloya eklemiyor. Sorun ne olabilir acaba? Şimdilik model event ile hallettim ama bunlar böyle kullanılmıyor muydu?

Verdiğin örnekte Mutator methodlar çalışmaz. Eğer doğru anlamışsam anlattığın durumu. Bu durumda Model Observer Sınıfı ya da Model içinde eventlar kullanılarak yapılabilir..

Model içinde tanımlanan mutatorler tanımlanan özellik güncellendiğinde ya da kayıt edildiğinde çalışır. 'code' ve 'ip' özellikleri model içinde güncellenirken ya da yeni kayıtta değer girilmişse Mutatorler çalışır.

Ben olsam model için bir observer class yazar  code ve ip model özelliklerini güncellerdim. Bu durumda modeli erişmek çok daha kolaydır. observer class'ına servis provider ile uygulamada kayıt ederdim. İçine de kayıt sırasında ip bilgisi çekmek için laravel request nesnesini enjekte ederdim..

Çevrimdışı

Forum alt kısmı