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.
$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) strong>
// 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.
echo Database::instance()->last_query
Alınan In Kohana 3, how do you figure out errors made during a query?.
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
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.
Desteklenmiyor. Alternatif pivot table
yüklemek olmak ve herhangi bir diğer tablo ile ilgili olarak veri eklemek istiyorum.
$user->add('role', $role, array('date_role_added' => time()));
where $role
olan ORM::factory('role', array('name' => 'user'));
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');
<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'));
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'));
Bu kod örnekleri şablon kontrolör uzanan zannederler.
public function before()
{
parent::before();
if (Request::current()->is_ajax())
{
$this->auto_render = FALSE;
}
}
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)
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.
if (Request::initial() !== Request::current())
{
print 'Internal called made with Request::factory';
}
if (Request::instance() !== Request::current())
{
print 'Internal called made with Request::factory';
}
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.
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.
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
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.