Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
Y
yii2
Project
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
PSDI Army
yii2
Commits
94fd8f61
Commit
94fd8f61
authored
Jul 03, 2013
by
Qiang Xue
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of github.com:yiisoft/yii2
parents
36eff141
279b274e
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
219 additions
and
24 deletions
+219
-24
controller.md
docs/guide/controller.md
+188
-0
database-basics.md
docs/guide/database-basics.md
+10
-11
upgrade-from-v1.md
docs/guide/upgrade-from-v1.md
+20
-12
autoloader.md
docs/internals/autoloader.md
+0
-0
Model.php
framework/yii/base/Model.php
+1
-1
No files found.
docs/guide/controller.md
View file @
94fd8f61
Controller
==========
Controller is one of the key parts of the application. It determines how to handle incoming request and creates a response.
Most often a controller takes HTTP request data and returns HTML, JSON or XML as a response.
Basics
------
Controller resides in application's
`controllers`
directory is is named like
`SiteController.php`
where
`Site`
part could be anything describing a set of actions it contains.
The basic web controller is a class that extends
[
[\yii\web\Controller
]
] and could be very simple:
```
php
namespace
app\controllers
;
use
yii\web\Controller
;
class
SiteController
extends
Controller
{
public
function
actionIndex
()
{
// will render view from "views/site/index.php"
return
$this
->
render
(
'index'
);
}
public
function
actionTest
()
{
// will just print "test" to the browser
return
'test'
;
}
}
```
As you can see, typical controller contains actions that are public class methods named as
`actionSomething`
.
Routes
------
Each controller action has a corresponding internal route. In our example above
`actionIndex`
has
`site/index`
route
and
`actionTest`
has
`site/test`
route. In this route
`site`
is referred to as controller ID while
`test`
is referred to
as action ID.
By default you can access specific controller and action using the
`http://example.com/?r=controller/action`
URL. This
behavior is fully customizable. For details refer to
[
URL Management
](
url.md
)
.
If controller is located inside a module its action internal route will be
`module/controller/action`
.
In case module, controller or action specified isn't found Yii will return "not found" page and HTTP status code 404.
### Defaults
If user isn't specifying any route i.e. using URL like
`http://example.com/`
, Yii assumes that default route should be
used. It is determined by
[
[\yii\web\Application::defaultRoute
]
] method and is
`site`
by default meaning that
`SiteController`
will be loaded.
A controller has a default action. When the user request does not specify which action to execute by usign an URL such as
`http://example.com/?r=site`
, the default action will be executed. By default, the default action is named as
`index`
.
It can be changed by setting the
[
[\yii\base\Controller::defaultAction
]
] property.
Action parameters
-----------------
It was already mentioned that a simple action is just a public method named as
`actionSomething`
. Now we'll review
ways that an action can get parameters from HTTP.
### Action parameters
You can define named arguments for an action and these will be automatically populated from corresponding values from
`$_GET`
. This is very convenient both because of the short syntax and an ability to specify defaults:
```
php
namespace
app\controllers
;
use
yii\web\Controller
;
class
BlogController
extends
Controller
{
public
function
actionView
(
$id
,
$version
=
null
)
{
$post
=
Post
::
find
(
$id
);
$text
=
$post
->
text
;
if
(
$version
)
{
$text
=
$post
->
getHistory
(
$version
);
}
return
$this
->
render
(
'view'
,
array
(
'post'
=>
$post
,
'text'
=>
$text
,
));
}
}
```
The action above can be accessed using either
`http://example.com/?r=blog/view&id=42`
or
`http://example.com/?r=blog/view&id=42&version=3`
. In the first case
`version`
isn't specified and default parameter
value is used instead.
### Getting data from request
If your action is working with data from HTTP POST or has too many GET parameters you can rely on request object that
is accessible via
`\Yii::$app->request`
:
```
php
namespace
app\controllers
;
use
yii\web\Controller
;
use
yii\web\HttpException
;
class
BlogController
extends
Controller
{
public
function
actionUpdate
(
$id
)
{
$post
=
Post
::
find
(
$id
);
if
(
!
$post
)
{
throw
new
HttpException
(
404
);
}
if
(
\Yii
::
$app
->
request
->
isPost
))
{
$post
->
load
(
$_POST
);
if
(
$post
->
save
())
{
$this
->
redirect
(
array
(
'view'
,
'id'
=>
$post
->
id
));
}
}
return
$this
->
render
(
'update'
,
array
(
'post'
=>
$post
,
));
}
}
```
Standalone actions
------------------
If action is generic enough it makes sense to implement it in a separate class to be able to reuse it.
Create
`actions/Page.php`
```
php
namespace
\app\actions
;
class
Page
extends
\yii\base\Action
{
public
$view
=
'index'
;
public
function
run
()
{
$this
->
controller
->
render
(
$view
);
}
}
```
The following code is too simple to implement as a separate action but gives an idea of how it works. Action implemented
can be used in your controller as following:
```
php
public
SiteController
extends
\yii\web\Controller
{
public
function
actions
()
{
return
array
(
'about'
=>
array
(
'class'
=>
'@app/actions/Page'
,
'view'
=>
'about'
,
),
),
);
}
}
```
After doing so you can access your action as
`http://example.com/?r=site/about`
.
Filters
-------
Catching all incoming requests
------------------------------
See also
--------
-
[
Console
](
console.md
)
\ No newline at end of file
docs/guide/database-basics.md
View file @
94fd8f61
...
...
@@ -133,27 +133,26 @@ $connection->createCommand()->delete('tbl_user', 'status = 0')->execute();
Quoting table and column names
------------------------------
If you are building query string dynamically make sure you're properly quoting table and column names using
[
[\yii\db\Connection::quoteTableName()]] and [[\yii\db\Connection::quoteColumnName()]
]:
Most of the time you would use the following syntax for quoting table and column names:
```
php
$column = $connection->quoteColumnName($column);
$table = $connection->quoteTableName($table);
$sql = "SELECT COUNT($column) FROM $table";
$sql
=
"SELECT COUNT([[
$column
]]) FROM
{
{$table}
}
"
;
$rowCount
=
$connection
->
createCommand
(
$sql
)
->
queryScalar
();
```
Alternatively you can use special syntax when writing SQL:
In the code above
`[[X]]`
will be converted to properly quoted column name while
`{{Y}}`
will be converted to properly
quoted table name.
The alternative is to quote table and column names manually using
[
[\yii\db\Connection::quoteTableName()
]
] and
[
[\yii\db\Connection::quoteColumnName()]
]:
```php
$sql = "SELECT COUNT({{$column}}) FROM
[
[$table
]
]";
$column = $connection->quoteColumnName($column);
$table = $connection->quoteTableName($table);
$sql = "SELECT COUNT($column) FROM $table";
$rowCount = $connection->createCommand($sql)->queryScalar();
```
In the code above `{{X}}` will be converted to properly quoted column name while `[[Y]]` will be converted to properly
quoted table name.
Prepared statements
-------------------
...
...
docs/guide/upgrade-from-v1.md
View file @
94fd8f61
...
...
@@ -163,6 +163,26 @@ A model is now associated with a form name returned by its `formName()` method.
mainly used when using HTML forms to collect user inputs for a model. Previously in 1.1,
this is usually hardcoded as the class name of the model.
A new methods called
`load()`
and
`Model::loadMultiple()`
is introduced to simplify the data population from user inputs
to a model. For example,
```
php
$model
=
new
Post
;
if
(
$model
->
load
(
$_POST
))
{
...
}
// which is equivalent to:
if
(
isset
(
$_POST
[
'Post'
]))
{
$model
->
attributes
=
$_POST
[
'Post'
];
}
$model
->
save
();
$postTags
=
array
();
$tagsCount
=
count
(
$_POST
[
'PostTag'
]);
while
(
$tagsCount
--
>
0
){
$postTags
[]
=
new
PostTag
(
array
(
'post_id'
=>
$model
->
id
));
}
Model
::
loadMultiple
(
$postTags
,
$_POST
);
```
Yii 2.0 introduces a new method called
`scenarios()`
to declare which attributes require
validation under which scenario. Child classes should overwrite
`scenarios()`
to return
...
...
@@ -196,18 +216,6 @@ Controllers
The
`render()`
and
`renderPartial()`
methods now return the rendering results instead of directly
sending them out. You have to
`echo`
them explicitly, e.g.,
`echo $this->render(...);`
.
A new method called
`populate()`
is introduced to simplify the data population from user inputs
to a model. For example,
```
php
$model
=
new
Post
;
if
(
$model
->
load
(
$_POST
))
{
...
}
// which is equivalent to:
if
(
isset
(
$_POST
[
'Post'
]))
{
$model
->
attributes
=
$_POST
[
'Post'
];
}
```
Widgets
-------
...
...
docs/autoloader.md
→
docs/
internals/
autoloader.md
View file @
94fd8f61
File moved
framework/yii/base/Model.php
View file @
94fd8f61
...
...
@@ -694,7 +694,7 @@ class Model extends Component implements \IteratorAggregate, \ArrayAccess
$success
=
true
;
}
}
elseif
(
isset
(
$data
[
$scope
][
$i
]))
{
$model
->
setAttributes
(
$data
[
$scope
[
$i
]
]);
$model
->
setAttributes
(
$data
[
$scope
][
$i
]);
$success
=
true
;
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment