61

他のコミュニティ wiki から着想を得て、あまり知られていない Kohana のヒント、コツ、機能について聞きたいと思っています。

  • 回答ごとに 1 つのヒントのみを含めてください。
  • 必要に応じて Kohana バージョンを追加します。

これはコミュニティ ウィキです。

4

12 に答える 12

23

データベース結果から Form::select() オプションを生成する

コハナ 3.1 および 3.0

$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);
于 2010-08-01T12:04:21.957 に答える
17

最後に実行されたクエリを表示

コハナ 3.1 および 3.0

echo Database::instance()->last_query

In Kohana 3から引用、クエリ中に発生したエラーをどのように把握しますか? .

于 2010-03-09T14:49:53.410 に答える
17

Kohana::$environment の設定

次の行を に貼り付けます.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のサポートを追加

于 2011-06-03T18:42:15.347 に答える
15

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セグメントを適用します。

于 2010-03-11T08:43:21.673 に答える
15

ORM を使用してピボット テーブルにデータを追加する

ORMsadd関数は、1pivot table1 に保存する追加データを指定できる 3 番目のパラメーターを受け入れます。

たとえば、ユーザーに多くのロールがあり、ロールに多くのユーザーがいる場合 (1roles_users1 という名前のテーブルを介して)、列キーとデータ値の配列をメソッドの 3 番目の引数として渡すことで、情報を 1pivot テーブル1 に保存できますadd

コハナ3.1

サポートされていません。pivot table別の方法として、他のテーブルの場合と同様に、データをロードして追加することもできます。

コハナ3.0

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

どこ $roleですか ORM::factory('role', array('name' => 'user'));

于 2010-03-08T18:37:56.180 に答える
12

AJAXリクエストのauto_renderingをオフにします

これらのコードサンプルは、テンプレートコントローラーから拡張していることを前提としています。

コハナ3.1

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

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

コハナ3.0

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

    if (Request::$is_ajax)
    {
      $this->auto_render = FALSE;
    }
}
于 2010-09-27T13:56:03.407 に答える
11

保守可能なルート

HTML と PHP でアンカーの場所をハードコーディングする代わりに、ルーティングを逆にすることをお勧めします。これは基本的に、ルートの場所を定義してから使用することを意味します。場所を変更する必要がある場合でも、何百もの場所ではなく、1 つの場所で行うことができます。

ルートはどこでも定義できますが、アプリケーションのブートストラップまたはモジュールのブートストラップ (init.php) に配置することをお勧めします。

それらは次のように設定されます。

Route::set('name', '<controller>(/<action>)', array('action' => 'login|logout');
  1. 路線名
  2. 照合する URL パス。
  3. <part>の照合対象を制限する正規表現。

部分が括弧で囲まれている場合、その部分はオプションです。ユーザーがパーツを提供しておらず、デフォルト値を提供する場合は、defaults メソッドを使用して値を指定します。

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

コハナ 3.1 および 3.0

次のコードは、ルートを逆にするために使用されるようになりました。URL パスを更新すると、すべての URLが以前と同じように機能するはずです。

Route::url('name', array('controller' => 'user', 'action' => 'login'));
于 2010-03-19T00:29:25.450 に答える
9

内部リクエストの確認

これらはサブリクエストと呼ばれます。Sam de Freyssinets の記事: Scaling Web Applications with HMVCを参照して、より詳細な説明を確認してください。バージョン間の初期とインスタンスの違いに注意してください。

コハナ3.1

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

コハナ3.0

if (Request::instance() !== Request::current())
{
    print 'Internal called made with Request::factory';
}
于 2010-03-06T15:59:45.987 に答える
9

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 構成ファイルから取得)

于 2011-06-03T19:17:51.893 に答える
7

HMVC + AJAX = is_remote()

この関数は、内部要求と 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());
}

お役に立てれば。

于 2011-05-31T19:09:45.650 に答える
6

エラーページを表示する

エラーページを表示する必要がある場合、Kohana には例外が組み込まれています。例外をスローしたら、カスタム例外ハンドラーを作成して、HTML エラー ページを表示できます。開発中の実際のエラーを表示するには、スイッチが必要です。

コハナ3.1

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

2 番目の引数は、エラー メッセージ内の文字列を置き換える方法を提供します。

コハナ3.0

HTTP 例外がバンドルされていません。独自の例外を作成して処理する必要があります。Kohana には、このためのチュートリアルがあります: Kohana - カスタム エラー ページ

于 2011-05-22T19:13:47.923 に答える
4

プリペアド ステートメントTRUNCATE mytableのようにSQL クエリを実行するには、最初のパラメーターとしてメソッドに渡します。クエリがどの CRUD 操作にも適合しない場合に便利です。nullDB::query()

于 2012-01-20T11:54:43.793 に答える