他のコミュニティ wiki から着想を得て、あまり知られていない Kohana のヒント、コツ、機能について聞きたいと思っています。
- 回答ごとに 1 つのヒントのみを含めてください。
- 必要に応じて Kohana バージョンを追加します。
これはコミュニティ ウィキです。
他のコミュニティ wiki から着想を得て、あまり知られていない Kohana のヒント、コツ、機能について聞きたいと思っています。
これはコミュニティ ウィキです。
$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
In Kohana 3から引用、クエリ中に発生したエラーをどのように把握しますか? .
次の行を に貼り付けます.htaccess
。
SetEnvIf SERVER_ADDR "^(127\.0\.0\.1|::1)$" KOHANA_ENV=development
SetEnvIf SERVER_ADDR "^((?!127\.0\.0\.1|::1).)*$" KOHANA_ENV=production
現在、localhost を使用している場合は開発モードであり、それ以外の場合は運用モードです
編集: IPv6のサポートを追加
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セグメントを適用します。
ORMsadd
関数は、1pivot table1 に保存する追加データを指定できる 3 番目のパラメーターを受け入れます。
たとえば、ユーザーに多くのロールがあり、ロールに多くのユーザーがいる場合 (1roles_users1 という名前のテーブルを介して)、列キーとデータ値の配列をメソッドの 3 番目の引数として渡すことで、情報を 1pivot テーブル1 に保存できますadd
。
サポートされていません。pivot table
別の方法として、他のテーブルの場合と同様に、データをロードして追加することもできます。
$user->add('role', $role, array('date_role_added' => time()));
どこ $role
ですか ORM::factory('role', array('name' => 'user'));
これらのコードサンプルは、テンプレートコントローラーから拡張していることを前提としています。
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 つの場所で行うことができます。
ルートはどこでも定義できますが、アプリケーションのブートストラップまたはモジュールのブートストラップ (init.php) に配置することをお勧めします。
それらは次のように設定されます。
Route::set('name', '<controller>(/<action>)', array('action' => 'login|logout');
<part>
の照合対象を制限する正規表現。部分が括弧で囲まれている場合、その部分はオプションです。ユーザーがパーツを提供しておらず、デフォルト値を提供する場合は、defaults メソッドを使用して値を指定します。
->defaults(array('action' => 'login'));
次のコードは、ルートを逆にするために使用されるようになりました。URL パスを更新すると、すべての URLが以前と同じように機能するはずです。
Route::url('name', array('controller' => 'user', 'action' => 'login'));
これらはサブリクエストと呼ばれます。Sam de Freyssinets の記事: Scaling Web Applications with HMVCを参照して、より詳細な説明を確認してください。バージョン間の初期とインスタンスの違いに注意してください。
if (Request::initial() !== Request::current())
{
print 'Internal called made with Request::factory';
}
if (Request::instance() !== Request::current())
{
print 'Internal called made with Request::factory';
}
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 構成ファイルから取得)
この関数は、内部要求と 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 例外がバンドルされていません。独自の例外を作成して処理する必要があります。Kohana には、このためのチュートリアルがあります: Kohana - カスタム エラー ページ
プリペアド ステートメントTRUNCATE mytable
のようにSQL クエリを実行するには、最初のパラメーターとしてメソッドに渡します。クエリがどの CRUD 操作にも適合しない場合に便利です。null
DB::query()