Inspired from the other community wikis, I m interested in hearing about the lesser known Kohana tips, tricks and features.
- Please, include only one tip per answer.
- Add Kohana versions if necessary.
This is a community wiki.
Inspired from the other community wikis, I m interested in hearing about the lesser known Kohana tips, tricks and features.
This is a community wiki.
$options = ORM::factory( model )
->order_by( title , ASC )
->find_all()
->as_array( id , title );
$select = Form::select( name , $options);
It should be noted this is not restricted to the ORM and can be used on all database results (they all support as_array). See the database results information for more details.
If you want to add a default option:
$options = Arr::merge(array( Please select a value. ), $options);
echo Database::instance()->last_query
Taken from In Kohana 3, how do you figure out errors made during a query?.
Paste these lines to your .htaccess
:
SetEnvIf SERVER_ADDR "^(127.0.0.1|::1)$" KOHANA_ENV=development
SetEnvIf SERVER_ADDR "^((?!127.0.0.1|::1).)*$" KOHANA_ENV=production
now, if you re on localhost, you are in development mode, otherwise you re in production mode
Edit: Added support for IPv6
The difference between this->request->route->uri()
and this->request->uri()
(Kohana 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 ));
As you can see, $this->request->route->uri() uses current route defaults (id is null), while $this->request->uri() applies current uri segments.
ORMs add
function accepts a third parameter where you can specify additional data to be saved on the 1pivot table1.
For example, if a user has many roles and a role has many users (through a table named 1roles_users1), you can save information to the 1pivot table1 by passing an array of column keys and data values as the 3rd argument to the add
method.
Not supported. The alternative would be to load the pivot table
and add the data as you would with any other table.
$user->add( role , $role, array( date_role_added => time()));
where $role
is ORM::factory( role , array( name => user ));
These code samples assume you re extending from the template controller.
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;
}
}
Instead of hardcoding anchor locations in your HTML and PHP, it s a good idea to reverse routing. This essentially means you define route locations and then use those; If you ever need to change the location it s done in one place and not hundreds.
Routes can be defined anywhere, but it s good practice to put them into the application bootstrap or your modules bootstrap (init.php).
They are set as follows:
Route::set( name , <controller>(/<action>) , array( action => login|logout );
<part>
is matched against.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 ));
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 )
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.
if (Request::initial() !== Request::current())
{
print Internal called made with Request::factory ;
}
if (Request::instance() !== Request::current())
{
print Internal called made with Request::factory ;
}
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.
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.
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.
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.
I am trying to write a script to prevent brute-force login attempts in a website I m building. The logic goes something like this: User sends login information. Check if username and password is ...
<?php $con=mysql_connect("localhost","mts","mts"); if(!con) { die( unable to connect . mysql_error()); } mysql_select_db("mts",$con); /* date_default_timezone_set ("Asia/Calcutta"); $date = ...
I found this script online that creates a thumbnail out of a image but the thumbnail image is created with poor quality how can I improve the quality of the image. And is there a better way to create ...
如何确认来自正确来源的数字。
Most sites need some way to show the dates on the site in the users preferred timezone. Below are two lists that I found and then one method using the built in PHP DateTime class in PHP 5. I need ...
I wonder there is a way to post a message to a facebook business page with cURL? thanks
I want to create text as a watermark for an image. the water mark should have the following properties front: Impact color: white opacity: 31% Font style: regular, bold Bevel and Emboss size: 30 ...
How does php cast boolean variables? I was trying to save a boolean value to an array: $result["Users"]["is_login"] = true; but when I use debug the is_login value is blank. and when I do ...