他のコミュニティウィキからインスピレーションを得て、あまり知られていないコハナのヒント、トリック、機能について聞いてみたいと思います。
これはコミュニティウィキです。
$options = ORM::factory('model')
->order_by('title','ASC')
->find_all()
->as_array('id','title');
$select = Form::select('name', $options);
これはORMに限定されず、すべてのデータベース結果で使用できることに注意してください(すべてas_arrayをサポートしています)。詳細については、 データベースの結果 情報を参照してください。
デフォルトのオプションを追加する場合:
$options = Arr::merge(array('Please select a value.'), $options);
echo Database::instance()->last_query
これらの行を.htaccess
に貼り付けます。
SetEnvIf SERVER_ADDR "^(127\.0\.0\.1|::1)$" KOHANA_ENV=development
SetEnvIf SERVER_ADDR "^((?!127\.0\.0\.1|::1).)*$" KOHANA_ENV=production
これで、ローカルホストを使用している場合は開発モードになり、それ以外の場合は本番モードになります。
編集: IPv6のサポートが追加されました
ORM add
関数は、1ピボットテーブル1に保存する追加データを指定できる3番目のパラメーターを受け入れます。
たとえば、ユーザーに多くのロールがあり、ロールに多くのユーザーがいる場合(1roles_users1という名前のテーブルを介して)、列キーとデータ値の配列を3番目の引数としてadd
メソッド。
サポートされていません。別の方法は、_pivot table
_をロードし、他のテーブルの場合と同じようにデータを追加することです。
_$user->add('role', $role, array('date_role_added' => time()));
_
where _$role
_ is ORM::factory('role', array('name' => 'user'));
this->request->route->uri()
とthis->request->uri()
の違い(コハナ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' ));
ご覧のとおり、$ this-> request-> route-> uri()は現在のルートのデフォルト(idはnull)を使用し、$ this-> request-> uri()は現在のuriセグメントを適用します。
これらのコードサンプルは、テンプレートコントローラーから拡張していることを前提としています。
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;
}
}
HTMLとPHPでアンカーの場所をハードコーディングする代わりに、ルーティングを逆にすることをお勧めします。これは基本的に、ルートの場所を定義してからそれらを使用することを意味します。場所を変更する必要がある場合は、数百ではなく1か所で行います。
ルートはどこにでも定義できますが、アプリケーションbootstrapまたはモジュールbootstrap(init.php)に配置することをお勧めします。
それらは次のように設定されます。
Route::set('name', '<controller>(/<action>)', array('action' => 'login|logout');
<part>
の照合対象を制限する正規表現。パーツが角かっこで囲まれている場合、そのパーツはオプションです。ユーザーがパーツを提供しておらず、デフォルト値を提供する場合は、defaultsメソッドを使用して値を指定します。
->defaults(array('action' => 'login'));
次のコードは、リバーシブルルートを持つために使用されます。 URLパスを更新でき、すべてのURL should以前と同じように機能します。
Route::url('name', array('controller' => 'user', 'action' => 'login'));
セットする base_url
自動的に:
Kohana::init(array(
// ...
'base_url' => dirname($_SERVER['SCRIPT_NAME']),
// ...
));
サイトが1&1でホストされている場合は、次を使用する必要があります。
Kohana::init(array(
// ...
'base_url' => substr($_SERVER["SCRIPT_NAME"], 0, strpos($_SERVER["SCRIPT_NAME"], basename($_SERVER["SCRIPT_FILENAME"])));
// ...
));
( Gallery3構成ファイル から取得)
これらはサブリクエストと呼ばれます。より詳細な説明については、Sam de Freyssinetsの記事をご覧ください: HMVCを使用したWebアプリケーションのスケーリング 。バージョン間の初期とインスタンスの違いに注意してください。
if (Request::initial() !== Request::current())
{
print 'Internal called made with Request::factory';
}
if (Request::instance() !== Request::current())
{
print 'Internal called made with Request::factory';
}
この関数は、内部リクエストとAJAXリクエスト)の両方をチェックします。ページの一部が最初にHMVC手法を使用して読み込まれ、その後AJAXで再読み込みできる場合に便利です。ベースに配置します。コントローラ、そこからすべての適切なコントローラを拡張します(私はそれを「ベースコントローラ」と呼びます):
public function is_remote()
{
if ($this->request->is_initial())
{
if ($this->request->is_ajax())
{
return TRUE;
}
else
{
return FALSE;
}
}
else
{
return TRUE;
}
}
これを書くためのより短い(同等の)方法:
public function is_remote()
{
return ( ! $this->request->is_initial() || $this->request->is_ajax());
}
お役に立てれば。
エラーページを表示する必要がある場合、Kohanaには例外が組み込まれています。例外をスローしたら、カスタム例外ハンドラーを作成して、HTMLエラーページを表示できます。開発中の実際のエラーを表示するスイッチが必要になります。
throw new HTTP_Exception_404('The article :article was not found',
array(':article' => $article->name));
2番目の引数は、エラーメッセージ内の文字列を置き換える方法を提供します。
HTTP例外はバンドルされていません。独自の例外を作成して処理する必要があります。コハナにはこのためのチュートリアルがあります: コハナ-カスタムエラーページ
_TRUNCATE mytable
_のようなSQLクエリを プリペアドステートメント で実行するには、最初のパラメータとしてnull
をDB::query()
メソッドに渡します。クエリがどのCRUD操作にも適合しない場合に便利です。