좋아하는 Kohana 팁 및 기능?
다른 커뮤니티 위키에서 영감을 받아 덜 알려진 Kohana 팁, 트릭 및 기능에 대해 듣고 싶습니다.
- 답변 당 하나의 팁만 포함하십시오.
- 필요한 경우 Kohana 버전을 추가하십시오.
이것은 커뮤니티 위키 입니다.
데이터베이스 결과에서 Form :: select () 옵션 생성
Kohana 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);
실행 된 마지막 쿼리 표시
Kohana 3.1 및 3.0
echo Database::instance()->last_query
In Kohana 3 에서 가져온 쿼리 중 발생한 오류를 어떻게 파악합니까? .
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에 대한 지원 추가
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 세그먼트를 적용합니다.
ORM을 사용하여 피벗 테이블에 데이터 추가
ORMs add
함수는 1pivot 테이블 1에 저장할 추가 데이터를 지정할 수있는 세 번째 매개 변수를 허용합니다.
예를 들어 사용자가 많은 역할을 갖고 있고 역할에 많은 사용자가있는 경우 (1roles_users1이라는 테이블을 통해) 열 키 및 데이터 값의 배열을 add
메서드에 세 번째 인수로 전달하여 1pivot table1에 정보를 저장할 수 있습니다 .
코 하나 3.1
지원되지 않습니다. 대안은 pivot table
다른 테이블과 마찬가지로 데이터 를로드 하고 추가하는 것입니다.
코 하나 3.0
$user->add('role', $role, array('date_role_added' => time()));
곳 $role
이다ORM::factory('role', array('name' => 'user'));
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;
}
}
유지 가능한 경로
HTML과 PHP에서 앵커 위치를 하드 코딩하는 대신 역 라우팅을 사용하는 것이 좋습니다. 이것은 본질적으로 경로 위치를 정의한 다음이를 사용함을 의미합니다. 위치를 변경해야하는 경우 수백 개가 아닌 한 곳에서 수행됩니다.
경로는 어디에서나 정의 할 수 있지만이를 애플리케이션 부트 스트랩이나 모듈 부트 스트랩 (init.php)에 넣는 것이 좋습니다.
다음과 같이 설정됩니다.
Route::set('name', '<controller>(/<action>)', array('action' => 'login|logout');
- 노선명
- 일치시킬 URL 경로입니다.
<part>
일치 대상 을 제한하는 정규식 입니다.
When a part is surrounded by brackets, that part is optional. If a user has not provided a part and you want to provide a default value, then use the defaults method to specify values.
->defaults(array('action' => 'login'));
Kohana 3.1 and 3.0
The following code is now used for having reversable routes. The URL path can be updated and all your URLs should work as before.
Route::url('name', array('controller' => 'user', 'action' => 'login'));
Set base_url
automatically:
Kohana::init(array(
// ...
'base_url' => dirname($_SERVER['SCRIPT_NAME']),
// ...
));
If your site is hosted at 1&1, you should use:
Kohana::init(array(
// ...
'base_url' => substr($_SERVER["SCRIPT_NAME"], 0, strpos($_SERVER["SCRIPT_NAME"], basename($_SERVER["SCRIPT_FILENAME"])));
// ...
));
(taken from Gallery3 config file )
Checking for an internal request
These are known as sub-requests. Take a look at Sam de Freyssinets article: Scaling Web Applications with HMVC for a more indepth explanation. Notice the initial vs instance difference between versions.
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';
}
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;
}
}
A shorter (equivalent) way of writing this:
public function is_remote()
{
return ( ! $this->request->is_initial() || $this->request->is_ajax());
}
Hope this helps.
Display an error page
If you need to display an error page, Kohana has built in exceptions for it. Once you've thrown an exception, you can create a custom exception handler and have a HTML error page shown. You'll want a switch to show the real error in development.
Kohana 3.1
throw new HTTP_Exception_404('The article :article was not found',
array(':article' => $article->name));
The 2nd argument provides a way for you to replace strings in the error message.
Kohana 3.0
Doesn't have HTTP exceptions bundled. You should create your own exceptions and handle them. Kohana has a tutorial for this: Kohana - Custom Error Pages
To execute SQL query like TRUNCATE mytable
with prepared statements, pass null
as first param to DB::query()
method. Useful, when query doesn't fit for any of CRUD operations.
참고URL : https://stackoverflow.com/questions/2393051/favourite-kohana-tips-features
'IT박스' 카테고리의 다른 글
데이터 유효성을 검사 할 때 예외를 던지는 것이 좋은 생각입니까, 나쁜 생각입니까? (0) | 2020.11.30 |
---|---|
반복보다 재귀를 선호해야하는 이유는 무엇입니까? (0) | 2020.11.30 |
UITableView에서 빈 행을 숨기고 비어 있지 않은 행을 기반으로 Uitableview의 높이를 변경하는 방법 (0) | 2020.11.29 |
PHP 치명적인 오류 : 빈 속성에 액세스 할 수 없습니다. (0) | 2020.11.29 |
현재 다른 Gradle 인스턴스에서 사용 중입니다. (0) | 2020.11.29 |