• 25-01-2016, 03:22:57
    #1
    Reveloper
    Merhaba,

    Arkadaşlar bir SOAP sistemim var ancak sürekli olarak login logout yapmam gerekiyor. ardı ardında bir çok işlem geliyor ve gereksiz kod yığını oluyor.

    Construct ile Login yapmak istiyorum.

    Main ilede bin bir türlü fonksiyon geliyor zaten içeri onları yönetmek istiyorum.

    Descruct ilede Logout yapmak istiyorum.

    lakin construct'dan gelen bütün sesion ve variable'lara ihtiyacım var ve her ikisindede connect soap yapmak zorundayım.

    Kısacası bir soap işlemim:

    $client = new SoapClient("https://$degisken/soap.wsdl", array("location"=>"https://$degisken/soap/"));
    
    //Login Olmak için
    try{
        $request = new stdClass();
        $request->_this = array ('_' => 'Process', 'type' => 'Service');
        $response = $client->__soapCall('GetService', array((array)$request));
    } catch (Exception $e){
        echo $e->getMessage();
        exit;
    }
    $req = $response->returnval;
    try
    {
    	$request = new stdClass();
    	$request->_this = $req ->sessionManager;
    	$request->userName = $user;
    	$request->password = $password;
    	$response = $client->__soapCall('Login', array((array)$request));
    } catch (Exception $e){
    	echo $e->getMessage();
    	exit;
    }
    
    ///Burada işlemler olacak ancak bunlarıda function ile almam lazım bazı işlemlerin fazla array'ları oluyor.
    /*Main İşlemler*/
    
    //İşlemler bitince:
    //Logout
    try
    {
    	$request = new stdClass();
    	$request->_this = $req->sessionManager;
    	$response = $client->__soapCall('Logout', array((array)$request));
    } catch (Exception $e){
    	echo $e->getMessage();
    	exit;
    }
    bunu her işlemde tekrarlamaktansa

    $islem = new SOAPislemi;
    $islem->mainProcess(array("x"=>"y","bar"=>"foo"));
    gibi yapmak istiyorum ama daha önce hiç yapıcı yıkıcı method yapmadım. ortadaki main fonksiyonuna ve yıkıcı fonksiyonuna nasıl yapıyı ileticem bilmiyorum. yardımcı olmak adına bir örnek yazabilirmisiniz?
  • 25-01-2016, 12:26:03
    #2
    Kimlik doğrulama veya yönetimden onay bekliyor.
    pek anlamadım ama

    clas içine 2 foksiyon aç login() ve logaut() diye

    $klas=new()
    $klas->login()
    $klas->islem1()
    $klas->islem2()
    $klas->islem3()
    $klas->islem4()
    $klas->logaut()


    yap önce tek sefer login ol işlerini yap bitince çıkış yap
    doğru anladım ise
  • 25-01-2016, 13:45:32
    #3
    Reveloper
    crazykurba adlı üyeden alıntı: mesajı görüntüle
    pek anlamadım ama

    clas içine 2 foksiyon aç login() ve logaut() diye

    $klas=new()
    $klas->login()
    $klas->islem1()
    $klas->islem2()
    $klas->islem3()
    $klas->islem4()
    $klas->logaut()


    yap önce tek sefer login ol işlerini yap bitince çıkış yap
    doğru anladım ise
    Yok hocam onu bende biliyorum. Benim yapmak istediğim.

    $class=new SoapClass;
    $class->__construct("user","password","domain");
    $class->islemler("yeni"=>"domainac","domain"=>"burtinet.c om");

    zaten yıkıcı method otomatik olarak çıkış yapıcak. bunu yapmak istiyorum sadece.

    bence bize bide @fatal abi el atabilir
  • 25-01-2016, 15:52:04
    #4
    Kısaca yoldan işini çözmeye çalışalım.

    Rooter class ını tanımlayalım.
    class SoapIslemci
    {
    
     public $SOAP; //  SOAP değişkenini her yerde kullanmak için public kullandık ama bu class ın dışında kullanmak istemiyorsan private kullanabilirsin.
    public $username = ''; // Birden fazla kullanıcılı işlem ise değişkeni class a ekledim
    public $password = '';// Birden fazla kullanıcılı işlem ise değişkeni class a ekledim
    
      public function __construct()
    {
    // Tanımladığımız SOAP değişkenine Soap Client ini çalıştırıp atamasını yaptık böylelikle 1 adet instanse oluşturmuş olduk tekrar tekar login olmamızı engelleyecek.
      $this->SOAP = $client = new SoapClient("https://$degisken/soap.wsdl", array("location"=>"https://$degisken/soap/"));
    try {
    $this-SOAP->__soapCall('Login',array('username'=>$this->username,'password'=>$this->password));
    } catch (Exception $e){
        echo $e->getMessage();
        exit;
    } 
    }
       public function mainProcess($arr = array())
       {
         
        }
    
        public function __destruct()
        {
            $this->SOAP->__soapCall('Logout',$variables);
        }
    }
    Araya istediğin fonksiyonları yazarak işlemini yaparsın. $this->SOAP ile aktif instanse ı kullanabilirsin.

    Ayrıca soapCall a neden önce stdClass ile yeni bir instanse açıp daha sonra gönderim yaparken array e zorluyorsun? direkt array gönder.

    Umarım yapmak istediğin şeyde yol gösterici olur
    Burti adlı üyeden alıntı: mesajı görüntüle
    Merhaba,

    Arkadaşlar bir SOAP sistemim var ancak sürekli olarak login logout yapmam gerekiyor. ardı ardında bir çok işlem geliyor ve gereksiz kod yığını oluyor.

    Construct ile Login yapmak istiyorum.

    Main ilede bin bir türlü fonksiyon geliyor zaten içeri onları yönetmek istiyorum.

    Descruct ilede Logout yapmak istiyorum.

    lakin construct'dan gelen bütün sesion ve variable'lara ihtiyacım var ve her ikisindede connect soap yapmak zorundayım.

    Kısacası bir soap işlemim:

    $client = new SoapClient("https://$degisken/soap.wsdl", array("location"=>"https://$degisken/soap/"));
    
    //Login Olmak için
    try{
        $request = new stdClass();
        $request->_this = array ('_' => 'Process', 'type' => 'Service');
        $response = $client->__soapCall('GetService', array((array)$request));
    } catch (Exception $e){
        echo $e->getMessage();
        exit;
    }
    $req = $response->returnval;
    try
    {
    	$request = new stdClass();
    	$request->_this = $req ->sessionManager;
    	$request->userName = $user;
    	$request->password = $password;
    	$response = $client->__soapCall('Login', array((array)$request));
    } catch (Exception $e){
    	echo $e->getMessage();
    	exit;
    }
    
    ///Burada işlemler olacak ancak bunlarıda function ile almam lazım bazı işlemlerin fazla array'ları oluyor.
    /*Main İşlemler*/
    
    //İşlemler bitince:
    //Logout
    try
    {
    	$request = new stdClass();
    	$request->_this = $req->sessionManager;
    	$response = $client->__soapCall('Logout', array((array)$request));
    } catch (Exception $e){
    	echo $e->getMessage();
    	exit;
    }
    bunu her işlemde tekrarlamaktansa

    $islem = new SOAPislemi;
    $islem->mainProcess(array("x"=>"y","bar"=>"foo"));
    gibi yapmak istiyorum ama daha önce hiç yapıcı yıkıcı method yapmadım. ortadaki main fonksiyonuna ve yıkıcı fonksiyonuna nasıl yapıyı ileticem bilmiyorum. yardımcı olmak adına bir örnek yazabilirmisiniz?
  • 25-01-2016, 16:02:33
    #5
    Reveloper
    MesutEyrice adlı üyeden alıntı: mesajı görüntüle
    Kısaca yoldan işini çözmeye çalışalım.

    Rooter class ını tanımlayalım.
    class SoapIslemci
    {
    
     public $SOAP; //  SOAP değişkenini her yerde kullanmak için public kullandık ama bu class ın dışında kullanmak istemiyorsan private kullanabilirsin.
    public $username = ''; // Birden fazla kullanıcılı işlem ise değişkeni class a ekledim
    public $password = '';// Birden fazla kullanıcılı işlem ise değişkeni class a ekledim
    
      public function __construct()
    {
    // Tanımladığımız SOAP değişkenine Soap Client ini çalıştırıp atamasını yaptık böylelikle 1 adet instanse oluşturmuş olduk tekrar tekar login olmamızı engelleyecek.
      $this->SOAP = $client = new SoapClient("https://$degisken/soap.wsdl", array("location"=>"https://$degisken/soap/"));
    try {
    $this-SOAP->__soapCall('Login',array('username'=>$this->username,'password'=>$this->password));
    } catch (Exception $e){
        echo $e->getMessage();
        exit;
    } 
    }
       public function mainProcess($arr = array())
       {
         
        }
    
        public function __destruct()
        {
            $this->SOAP->__soapCall('Logout',$variables);
        }
    }
    Araya istediğin fonksiyonları yazarak işlemini yaparsın. $this->SOAP ile aktif instanse ı kullanabilirsin.

    Ayrıca soapCall a neden önce stdClass ile yeni bir instanse açıp daha sonra gönderim yaparken array e zorluyorsun? direkt array gönder.

    Umarım yapmak istediğin şeyde yol gösterici olur
    mükemmel olduğunu söyledimmi hocam ?

    peki construct içerisinde soaptan bi işlem yapıp $req diye bir değişkeni bütün fonksiyonlara vermem lazım global mi vereyim diğer fonksiyonların içinde ona ?

    kusurabakmayın yükselip class ile işlem yapmak istedim elim ayağım birbirine girdi
  • 25-01-2016, 16:22:18
    #6
    Teşekkürler hocam sağol bilginizi ve pratiğinizi geliştirebiliyorsak ne mutlu..

    Şimdi şöyle düşün eğer bu result fonksiyonlardan etkileşime girdikten sonra bir sonuç döndürüyorsa fonksiyonlara return değeri verebilirsin.

    Yada bunuda bir class a değişken olarak tanımla

    public $result;
    
    public function blabla()
    {
       $this->result = $this-SOAP->__getLastRequest();
    }
    Böylelikle bu değişkenide her yerde kullanabilirsin.


    Burti adlı üyeden alıntı: mesajı görüntüle
    mükemmel olduğunu söyledimmi hocam ?

    peki construct içerisinde soaptan bi işlem yapıp $req diye bir değişkeni bütün fonksiyonlara vermem lazım global mi vereyim diğer fonksiyonların içinde ona ?

    kusurabakmayın yükselip class ile işlem yapmak istedim elim ayağım birbirine girdi
  • 25-01-2016, 16:37:05
    #7
    Reveloper
    MesutEyrice adlı üyeden alıntı: mesajı görüntüle
    Teşekkürler hocam sağol bilginizi ve pratiğinizi geliştirebiliyorsak ne mutlu..

    Şimdi şöyle düşün eğer bu result fonksiyonlardan etkileşime girdikten sonra bir sonuç döndürüyorsa fonksiyonlara return değeri verebilirsin.

    Yada bunuda bir class a değişken olarak tanımla

    public $result;
    
    public function blabla()
    {
       $this->result = $this-SOAP->__getLastRequest();
    }
    Böylelikle bu değişkenide her yerde kullanabilirsin.
    tamamdır hocam teşekkürler. şu an tek problemim değişkenleri iletemiyorum:


    class SOAPClassim
    {
    	public $SOAP;
    	public $prefix = '';
    	public $ip = '';
    	public $port = '';
    	public $username = '';
    	public $password = '';
    
    	public function __construct() 
    	{
    		$url=$prefix.'://'.$this->ip;
    		if(!empty($this->port)){
    			$url=$url.':'.$this->port;
    		}
    		echo $this->ip;
    		$this->SOAP = $client = new SoapClient("$url/sdk/soap.wsdl", array("location"=>"$url/sdk/"));
    		try{
    ................
    
    $esxi=new SOAPClassim;
    // aşağıdaki değişkenleri algılamıyo.
    $esxi->prefix='https';
    $esxi->ip='google.com';
    $esxi->username='user';
    $esxi->password='sifre';
  • 25-01-2016, 16:45:15
    #8
    Güzel bir sorunla karşılaşmışsın sebebi çok basit..

    Construct method u daha class ı tanımladığında çalışır yani sen
    $asd = new SoapClassim(); dediğin anda o method çalışır böylelikle sen değişkenleri sonradan tanımlamış olursun. Bu tarz durumlarda çözüm nedir peki şimdi ona bakalım.

    Önce construct methodunu düzenleyelim.
    public function __construct($prefix,$ip,$port,$username,$password) 
    	{
    		$url=$prefix.'://'.$ip;
    		if(!empty($port)){
    			$url=$url.':'.$port;
    		}
    		echo $this->ip;
    		$this->SOAP = $client = new SoapClient("$url/sdk/soap.wsdl", array("location"=>"$url/sdk/"));
    Username ve password da construct a olduğu için fonksiyona variable olarak gönderdim. Dilersen daha sonra ben bu değişkenleri kullanmam lazım diyorsan construct ın içinde tanımlayabilirsin.

    public function construct($ip,$port,$username,$password)
    {
       $this->ip = $ip;
    $this->port = $port;
    $this->username = $username;
    $this->password=$password;
    }
    Kullanmıyorsan gerek yok..

    Şimdi gelelim class ımızı tanımladığımızda yapmamız gerekene
    $esxi=new SOAPClassim('https','google.com','80','mesut','eyrice');
    $esxi->mainProccess();
    Instanse tanımlarken değişkenleri gönderiyoruz.


    Burti adlı üyeden alıntı: mesajı görüntüle
    tamamdır hocam teşekkürler. şu an tek problemim değişkenleri iletemiyorum:


    class SOAPClassim
    {
    	public $SOAP;
    	public $prefix = '';
    	public $ip = '';
    	public $port = '';
    	public $username = '';
    	public $password = '';
    
    	public function __construct() 
    	{
    		$url=$prefix.'://'.$this->ip;
    		if(!empty($this->port)){
    			$url=$url.':'.$this->port;
    		}
    		echo $this->ip;
    		$this->SOAP = $client = new SoapClient("$url/sdk/soap.wsdl", array("location"=>"$url/sdk/"));
    		try{
    ................
    
    $esxi=new SOAPClassim;
    $esxi->prefix='https';
    $esxi->ip='google.com';
    $esxi->username='user';
    $esxi->password='sifre';
  • 27-01-2016, 08:57:52
    #9
    MesutEyrice çok güzel yardımcı olmuş. Kolay gelsin.