Favori Kohana İpuçları &

12 Cevap php

Diğer topluluk wiki esinlenerek, ben az bilinen Kohana ipuçları, hileler ve özellikleri hakkında işitme ilgileniyorum.

  • , Cevap başına sadece bir ipucu eklemeyi unutmayın.
  • Gerekirse Kohana sürümlerini ekleyin.

Bu community wiki olduğunu.

12 Cevap

Generating Form::select() options from database result

Kohana 3.1 and 3.0

$options = ORM::factory('model')
 ->order_by('title','ASC')
 ->find_all()
 ->as_array('id','title');

$select = Form::select('name', $options);

Bu ORM sınırlı değildir dikkat edilmelidir ve veritabanı sonuçları (hepsi destek as_array) kullanılabilir. Daha fazla bilgi için database results bilgilere bakın.

Eğer varsayılan bir seçeneği eklemek isterseniz:

$options = Arr::merge(array('Please select a value.'), $options);

The difference between this->request->route->uri() ve this->request->uri() (Kohana 3)

// Current URI = welcome/test/5 
// Using default route ":controller/:action/:id"

// This returns "welcome/test/5"
echo $this->request->uri(); 

// This returns "welcome/test1/5"
echo $this->request->uri(array( 'action' => 'test1' )); 

// This returns "welcome/index"
echo $this->request->route->uri();

// This returns "welcome/test1"
echo $this->request->route->uri(array( 'action' => 'test1' ));

Gördüğünüz gibi $ this-> istek-> uri () geçerli uri kesimleri geçerli olmakla birlikte, $ this-> istek-> yol-> uri () mevcut rota varsayılan (id null) kullanır.

Show last query executed

Kohana 3.1 and 3.0

echo Database::instance()->last_query

Alınan In Kohana 3, how do you figure out errors made during a query?.

Set Kohana::$environment

Lütfen bu satırları yapıştırın .htaccess:

SetEnvIf SERVER_ADDR "^(127\.0\.0\.1|::1)$" KOHANA_ENV=development
SetEnvIf SERVER_ADDR "^((?!127\.0\.0\.1|::1).)*$" KOHANA_ENV=production

localhost üzerinde iseniz, şimdi, aksi takdirde üretim modunda konum, gelişme modunda

Edit: IPv6 için destek eklendi

Add data to pivot tables using ORM

ORMS'nin add fonksiyonu 1pivot tablo1 kaydedilecek ek verileri belirtmek üçüncü bir parametre kabul eder.

Bir kullanıcı birçok rolleri vardır ve bir rol (1roles_users1 adında bir tablo ile) çok sayıda kullanıcı var Örneğin, sen ({[için 3. argüman olarak sütun anahtarları ve veri değerleri bir dizi geçerek 1pivot tablo1 bilgi kaydedebilir 0)}] yöntemi.

Kohana 3.1

Desteklenmiyor. Alternatif pivot table yüklemek olmak ve herhangi bir diğer tablo ile ilgili olarak veri eklemek istiyorum.

Kohana 3.0

$user->add('role', $role, array('date_role_added' => time()));

where $role olan ORM::factory('role', array('name' => 'user'));

Maintainable routes

Bunun yerine HTML ve PHP çapa yerleri hardcoding, bu yönlendirme tersine çevirmek için iyi bir fikirdir. Bu aslında yol konumları tanımlamak ve sonra da bu kullanmak anlamına gelir; Hiç konumunu değiştirmek gerekiyorsa tek bir yerde değil, yüzlerce bitti.

Yollar her yerde tanımlanabilir, ancak bu uygulama bootstrap veya modülleri önyükleme (init.php) içine koymak için iyi bir uygulamadır.

Bunlar şu şekilde ayarlanır:

Route::set('name', '<controller>(/<action>)', array('action' => 'login|logout');
  1. Rota adı
  2. URL yolu karşı maç.
  3. <part> karşı eşleşen ne sınırlamak için bir düzenli ifade.

Üyesi ayraç zaman, bu bölüm isteğe bağlıdır. Bir kullanıcı bir kısmını temin etmemiştir ve varsayılan bir değer sağlamak istiyorsanız, o değerleri belirtmek için varsayılan yöntemi kullanın.

->defaults(array('action' => 'login'));

Kohana 3.1 and 3.0

Aşağıdaki kodu artık tersinir yolları olması için kullanılır. URL yolu güncellenebilir ve tüm URL'ler should eskisi gibi çalışmayabilir.

Route::url('name', array('controller' => 'user', 'action' => 'login'));

Turn off auto_rendering for AJAX requests

Bu kod örnekleri şablon kontrolör uzanan zannederler.

Kohana 3.1

public function before()
{
    parent::before();

    if (Request::current()->is_ajax())
    {
      $this->auto_render = FALSE;
    }
}

Kohana 3.0

public function before()
{
    parent::before();

    if (Request::$is_ajax)
    {
      $this->auto_render = FALSE;
    }
}

base_url otomatik olarak ayarlanır:

Kohana::init(array(
    // ...
    'base_url' => dirname($_SERVER['SCRIPT_NAME']),
    // ...
));

Siteniz 1 & 1 barındırılan ise, kullanmalısınız:

Kohana::init(array(
    // ...
    'base_url' => substr($_SERVER["SCRIPT_NAME"], 0, strpos($_SERVER["SCRIPT_NAME"], basename($_SERVER["SCRIPT_FILENAME"])));
    // ...
));

(Alınan Gallery3 config file)

Checking for an internal request

Bu alt istekleri olarak bilinir. Bir daha etraflı bir açıklama için Scaling Web Applications with HMVC : Sam de Freyssinets yazı bir göz atın. Sürümleri arasındaki fark örneği vs baş harfini dikkat edin.

Kohana 3.1

if (Request::initial() !== Request::current())
{
    print 'Internal called made with Request::factory';
}

Kohana 3.0

if (Request::instance() !== Request::current())
{
    print 'Internal called made with Request::factory';
}

Display an error page

Eğer bir hata sayfası görüntülemeniz gerekiyorsa, Kohana bunun için istisnalar inşa etti. Eğer bir özel durum sonra, bir özel durum işleyicisi oluşturmak ve bir HTML hata sayfası gösterilir olabilir. Sen bir anahtar gelişme gerçek hatayı göstermek isteyeceksiniz.

Kohana 3.1

throw new HTTP_Exception_404('The article :article was not found', 
    array(':article' => $article->name));

2. argüman hata mesajı dizeleri değiştirmek için bir yol sağlar.

Kohana 3.0

Birlikte HTTP istisnalar yok. Kendi özel durumlar oluşturmak ve bunları işlemek gerekir. Kohana Bunun için bir öğretici vardır: Kohana - Custom Error Pages

HMVC + AJAX = is_remote()

This function checks both - the internal and AJAX requests. It might be handy if some parts of the page are initially loaded using HMVC technique, and can be then reloaded with AJAX. Place it withing some base controller, from which you extend all your proper controllers (I call it 'base controller'):

public function is_remote()
{
    if ($this->request->is_initial())
    {
        if ($this->request->is_ajax())
        {
            return TRUE;
        }
        else
        {
            return FALSE;
        }
    }
    else
    {
        return TRUE;
    }
}

Bu yazı daha kısa (eşdeğer) yol:

public function is_remote()
{
    return ( ! $this->request->is_initial() || $this->request->is_ajax());
}

Umarım bu yardımcı olur.

TRUNCATE mytable prepared statements, DB::query() yöntemine ilk parametre olarak null geçmek olduğu gibi SQL sorgusu çalıştırmak için. Faydalı, sorgu CRUD işlemleri için herhangi uymuyor zaman.