Commit 78243fed authored by Taylor Otwell's avatar Taylor Otwell

Merge branch 'develop' of github.com:laravel/laravel into develop

parents ff94d166 eafb4bdf
<?php
return array(
/*
|--------------------------------------------------------------------------
| Pagination Language Lines
|--------------------------------------------------------------------------
|
| The following language lines are used by the paginator library to build
| the pagination links. You're free to change them to anything you want.
| If you come up with something more exciting, let us know.
|
*/
'previous' => '← Назад',
'next' => 'Вперёд →',
);
\ No newline at end of file
<?php
return array(
/*
|--------------------------------------------------------------------------
| Validation Language Lines
|--------------------------------------------------------------------------
|
| The following language lines contain the default error messages used
| by the validator class. Some of the rules contain multiple versions,
| such as the size (max, min, between) rules. These versions are used
| for different input types such as strings and files.
|
| These language lines may be easily changed to provide custom error
| messages in your application. Error messages for custom validation
| rules may also be added to this file.
|
*/
"accepted" => "Вы должны принять :attribute.",
"active_url" => "Поле :attribute должно быть полным URL.",
"after" => "Поле :attribute должно быть датой после :date.",
"alpha" => "Поле :attribute может содержать только буквы.",
"alpha_dash" => "Поле :attribute может содержать только буквы, цифры и тире.",
"alpha_num" => "Поле :attribute может содержать только буквы и цифры.",
"before" => "Поле :attribute должно быть датой перед :date.",
"between" => array(
"numeric" => "Поле :attribute должно быть между :min и :max.",
"file" => "Поле :attribute должно быть от :min до :max Килобайт.",
"string" => "Поле :attribute должно быть от :min до :max символов.",
),
"confirmed" => "Поле :attribute не совпадает с подтверждением.",
"different" => "Поля :attribute и :other должны различаться.",
"email" => "Поле :attribute имеет неверный формат.",
"exists" => "Выбранное значение для :attribute уже существует.",
"image" => "Поле :attribute должно быть картинкой.",
"in" => "Выбранное значение для :attribute не верно.",
"integer" => "Поле :attribute должно быть целым числом.",
"ip" => "Поле :attribute должно быть полным IP-адресом.",
"match" => "Поле :attribute имеет неверный формат.",
"max" => array(
"numeric" => "Поле :attribute должно быть меньше :max.",
"file" => "Поле :attribute должно быть меньше :max Килобайт.",
"string" => "Поле :attribute должно быть короче :max символов.",
),
"mimes" => "Поле :attribute должно быть файлом одного из типов: :values.",
"min" => array(
"numeric" => "Поле :attribute должно быть не менее :min.",
"file" => "Поле :attribute должно быть не менее :min Килобайт.",
"string" => "Поле :attribute должно быть не короче :min символов.",
),
"not_in" => "Выбранное значение для :attribute не верно.",
"numeric" => "Поле :attribute должно быть числом.",
"required" => "Поле :attribute обязательно для заполнения.",
"same" => "Значение :attribute должно совпадать с :other.",
"size" => array(
"numeric" => "Поле :attribute должно быть :size.",
"file" => "Поле :attribute должно быть :size Килобайт.",
"string" => "Поле :attribute должно быть длиной :size символов.",
),
"unique" => "Такое значение поля :attribute уже существует.",
"url" => "Поле :attribute имеет неверный формат.",
/*
|--------------------------------------------------------------------------
| Custom Validation Language Lines
|--------------------------------------------------------------------------
|
| Here you may specify custom validation messages for attributes using the
| convention "attribute_rule" to name the lines. This helps keep your
| custom validation clean and tidy.
|
| So, say you want to use a custom validation message when validating that
| the "email" attribute is unique. Just add "email_unique" to this array
| with your custom message. The Validator will handle the rest!
|
*/
'custom' => array(),
/*
|--------------------------------------------------------------------------
| Validation Attributes
|--------------------------------------------------------------------------
|
| The following language lines are used to swap attribute place-holders
| with something more reader friendly such as "E-Mail Address" instead
| of "email". Your users will thank you.
|
| The Validator class will automatically search this array of lines it
| is attempting to replace the :attribute place-holder in messages.
| It's pretty slick. We think you'll like it.
|
*/
'attributes' => array(),
);
\ No newline at end of file
<!doctype html> <!doctype html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Error 404 - Not Found</title> <title>Error 404 - Not Found</title>
<meta name="viewport" content="width=device-width">
<style> <style type="text/css">
@import url(http://fonts.googleapis.com/css?family=Ubuntu); @import url(http://fonts.googleapis.com/css?family=Droid+Sans);
body { article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
background: #eee; audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
color: #6d6d6d; audio:not([controls]) { display: none; }
font: normal normal normal 14px/1.253 Ubuntu, sans-serif; [hidden] { display: none; }
margin: 0 0 25px 0; html { font-size: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
min-width: 800px; html, button, input, select, textarea { font-family: sans-serif; color: #222; }
padding: 0; body { margin: 0; font-size: 1em; line-height: 1.4; }
} ::-moz-selection { background: #E37B52; color: #fff; text-shadow: none; }
::selection { background: #E37B52; color: #fff; text-shadow: none; }
#main { a { color: #00e; }
background-clip: padding-box; a:visited { color: #551a8b; }
background-color: #fff; a:hover { color: #06e; }
border:1px solid #ccc; a:focus { outline: thin dotted; }
border-radius: 5px; a:hover, a:active { outline: 0; }
box-shadow: 0 0 10px #cdcdcd; abbr[title] { border-bottom: 1px dotted; }
margin: 25px auto 0; b, strong { font-weight: bold; }
padding: 30px; blockquote { margin: 1em 40px; }
width: 700px; dfn { font-style: italic; }
position: relative; hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
} ins { background: #ff9; color: #000; text-decoration: none; }
mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
#main h1 { pre, code, kbd, samp { font-family: monospace, serif; _font-family: 'courier new', monospace; font-size: 1em; }
font-family: 'Ubuntu'; pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
font-size: 38px; q { quotes: none; }
letter-spacing: 2px; q:before, q:after { content: ""; content: none; }
margin: 0 0 10px 0; small { font-size: 85%; }
padding: 0; sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
} sup { top: -0.5em; }
sub { bottom: -0.25em; }
#main h2 { ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
color: #999; dd { margin: 0 0 0 40px; }
font-size: 18px; nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }
letter-spacing: 3px; img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
margin: 0 0 25px 0; svg:not(:root) { overflow: hidden; }
padding: 0 0 0 0; figure { margin: 0; }
form { margin: 0; }
fieldset { border: 0; margin: 0; padding: 0; }
label { cursor: pointer; }
legend { border: 0; *margin-left: -7px; padding: 0; white-space: normal; }
button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
button, input { line-height: normal; }
button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; *overflow: visible; }
button[disabled], input[disabled] { cursor: default; }
input[type="checkbox"], input[type="radio"] { box-sizing: border-box; padding: 0; *width: 13px; *height: 13px; }
input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { -webkit-appearance: none; }
button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
textarea { overflow: auto; vertical-align: top; resize: vertical; }
input:valid, textarea:valid { }
input:invalid, textarea:invalid { background-color: #f0dddd; }
table { border-collapse: collapse; border-spacing: 0; }
td { vertical-align: top; }
body
{
font-family:'Droid Sans', sans-serif;
font-size:10pt;
color:#555;
line-height: 25px;
} }
#main h3 { .wrapper
color: #999; {
margin-top: 24px; width:760px;
padding: 0 0 0 0; margin:0 auto 5em auto;
} }
#main h3 { .main
font-size: 18px; {
overflow:hidden;
} }
#main p { .error-spacer
line-height: 25px; {
margin: 10px 0; height:4em;
} }
#main pre { a, a:visited
background-color: #333; {
border-left: 1px solid #d8d8d8; color:#2972A3;
border-top: 1px solid #d8d8d8;
border-radius: 5px;
color: #eee;
padding: 10px;
} }
#main ul { a:hover
margin: 10px 0; {
padding: 0 30px; color:#72ADD4;
}
#main li {
margin: 5px 0;
} }
</style> </style>
</head> </head>
<body> <body onload="prettyPrint()">
<div id="main"> <div class="wrapper">
<div class="error-spacer"></div>
<div role="main" class="main">
<?php $messages = array('We need a map.', 'I think we\'re lost.', 'We took a wrong turn.'); ?> <?php $messages = array('We need a map.', 'I think we\'re lost.', 'We took a wrong turn.'); ?>
<h1><?php echo $messages[mt_rand(0, 2)]; ?></h1> <h1><?php echo $messages[mt_rand(0, 2)]; ?></h1>
<h2>Server Error: 404 (Not Found)</h2> <h2>Server Error: 404 (Not Found)</h2>
<hr>
<h3>What does this mean?</h3> <h3>What does this mean?</h3>
<p> <p>
...@@ -99,5 +120,6 @@ ...@@ -99,5 +120,6 @@
Perhaps you would like to go to our <?php echo HTML::link('/', 'home page'); ?>? Perhaps you would like to go to our <?php echo HTML::link('/', 'home page'); ?>?
</p> </p>
</div> </div>
</body> </div>
</body>
</html> </html>
\ No newline at end of file
<!doctype html> <!doctype html>
<html> <html lang="en">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>Error 500 - Internal Server Error</title> <title>Error 500 - Internal Server Error</title>
<meta name="viewport" content="width=device-width">
<style> <style type="text/css">
@import url(http://fonts.googleapis.com/css?family=Ubuntu); @import url(http://fonts.googleapis.com/css?family=Droid+Sans);
body { article, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }
background: #eee; audio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }
color: #6d6d6d; audio:not([controls]) { display: none; }
font: normal normal normal 14px/1.253 Ubuntu, sans-serif; [hidden] { display: none; }
margin: 0 0 25px 0; html { font-size: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }
min-width: 800px; html, button, input, select, textarea { font-family: sans-serif; color: #222; }
padding: 0; body { margin: 0; font-size: 1em; line-height: 1.4; }
} ::-moz-selection { background: #E37B52; color: #fff; text-shadow: none; }
::selection { background: #E37B52; color: #fff; text-shadow: none; }
#main { a { color: #00e; }
background-clip: padding-box; a:visited { color: #551a8b; }
background-color: #fff; a:hover { color: #06e; }
border:1px solid #ccc; a:focus { outline: thin dotted; }
border-radius: 5px; a:hover, a:active { outline: 0; }
box-shadow: 0 0 10px #cdcdcd; abbr[title] { border-bottom: 1px dotted; }
margin: 25px auto 0; b, strong { font-weight: bold; }
padding: 30px; blockquote { margin: 1em 40px; }
width: 700px; dfn { font-style: italic; }
position: relative; hr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }
} ins { background: #ff9; color: #000; text-decoration: none; }
mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }
#main h1 { pre, code, kbd, samp { font-family: monospace, serif; _font-family: 'courier new', monospace; font-size: 1em; }
font-family: 'Ubuntu'; pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }
font-size: 38px; q { quotes: none; }
letter-spacing: 2px; q:before, q:after { content: ""; content: none; }
margin: 0 0 10px 0; small { font-size: 85%; }
padding: 0; sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }
} sup { top: -0.5em; }
sub { bottom: -0.25em; }
#main h2 { ul, ol { margin: 1em 0; padding: 0 0 0 40px; }
color: #999; dd { margin: 0 0 0 40px; }
font-size: 18px; nav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }
letter-spacing: 3px; img { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }
margin: 0 0 25px 0; svg:not(:root) { overflow: hidden; }
padding: 0 0 0 0; figure { margin: 0; }
form { margin: 0; }
fieldset { border: 0; margin: 0; padding: 0; }
label { cursor: pointer; }
legend { border: 0; *margin-left: -7px; padding: 0; white-space: normal; }
button, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }
button, input { line-height: normal; }
button, input[type="button"], input[type="reset"], input[type="submit"] { cursor: pointer; -webkit-appearance: button; *overflow: visible; }
button[disabled], input[disabled] { cursor: default; }
input[type="checkbox"], input[type="radio"] { box-sizing: border-box; padding: 0; *width: 13px; *height: 13px; }
input[type="search"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }
input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { -webkit-appearance: none; }
button::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }
textarea { overflow: auto; vertical-align: top; resize: vertical; }
input:valid, textarea:valid { }
input:invalid, textarea:invalid { background-color: #f0dddd; }
table { border-collapse: collapse; border-spacing: 0; }
td { vertical-align: top; }
body
{
font-family:'Droid Sans', sans-serif;
font-size:10pt;
color:#555;
line-height: 25px;
} }
#main h3 { .wrapper
color: #999; {
margin-top: 24px; width:760px;
padding: 0 0 0 0; margin:0 auto 5em auto;
} }
#main h3 { .main
font-size: 18px; {
overflow:hidden;
} }
#main p { .error-spacer
line-height: 25px; {
margin: 10px 0; height:4em;
} }
#main pre { a, a:visited
background-color: #333; {
border-left: 1px solid #d8d8d8; color:#2972A3;
border-top: 1px solid #d8d8d8;
border-radius: 5px;
color: #eee;
padding: 10px;
} }
#main ul { a:hover
margin: 10px 0; {
padding: 0 30px; color:#72ADD4;
}
#main li {
margin: 5px 0;
} }
</style> </style>
</head> </head>
<body> <body onload="prettyPrint()">
<div id="main"> <div class="wrapper">
<div class="error-spacer"></div>
<div role="main" class="main">
<?php $messages = array('Ouch.', 'Oh no!', 'Whoops!'); ?> <?php $messages = array('Ouch.', 'Oh no!', 'Whoops!'); ?>
<h1><?php echo $messages[mt_rand(0, 2)]; ?></h1> <h1><?php echo $messages[mt_rand(0, 2)]; ?></h1>
<h2>Server Error: 500 (Internal Server Error)</h2> <h2>Server Error: 500 (Internal Server Error)</h2>
<hr>
<h3>What does this mean?</h3> <h3>What does this mean?</h3>
<p> <p>
...@@ -99,5 +120,6 @@ ...@@ -99,5 +120,6 @@
Perhaps you would like to go to our <?php echo HTML::link('/', 'home page'); ?>? Perhaps you would like to go to our <?php echo HTML::link('/', 'home page'); ?>?
</p> </p>
</div> </div>
</body> </div>
</body>
</html> </html>
\ No newline at end of file
<?php namespace Laravel\Cache\Drivers; use Memcache; <?php namespace Laravel\Cache\Drivers;
class Memcached extends Driver { class Memcached extends Driver {
/** /**
* The Memcache instance. * The Memcache instance.
* *
* @var Memcache * @var Memcached
*/ */
protected $memcache; protected $memcache;
...@@ -19,10 +19,10 @@ class Memcached extends Driver { ...@@ -19,10 +19,10 @@ class Memcached extends Driver {
/** /**
* Create a new Memcached cache driver instance. * Create a new Memcached cache driver instance.
* *
* @param Memcache $memcache * @param Memcached $memcache
* @return void * @return void
*/ */
public function __construct(Memcache $memcache, $key) public function __construct(\Memcached $memcache, $key)
{ {
$this->key = $key; $this->key = $key;
$this->memcache = $memcache; $this->memcache = $memcache;
...@@ -68,7 +68,7 @@ class Memcached extends Driver { ...@@ -68,7 +68,7 @@ class Memcached extends Driver {
*/ */
public function put($key, $value, $minutes) public function put($key, $value, $minutes)
{ {
$this->memcache->set($this->key.$key, $value, 0, $minutes * 60); $this->memcache->set($this->key.$key, $value, $minutes * 60);
} }
/** /**
......
...@@ -33,6 +33,8 @@ ...@@ -33,6 +33,8 @@
- [Added `unless` structure to Blade template engine](/docs/views/templating#blade-unless). - [Added `unless` structure to Blade template engine](/docs/views/templating#blade-unless).
- [Added Blade comments](/docs/views/templating#blade-comments). - [Added Blade comments](/docs/views/templating#blade-comments).
- [Added simpler environment management](/docs/install#environments). - [Added simpler environment management](/docs/install#environments).
- Added `View::exists` method.
- Use [Memcached](http://php.net/manual/en/book.memcached.php) API instead of older [Memcache](http://php.net/manual/en/book.memcache.php) API.
- Added support for bundles outside of the bundle directory. - Added support for bundles outside of the bundle directory.
- Added support for DateTime database query bindings. - Added support for DateTime database query bindings.
- Migrated to the Symfony HttpFoundation component for core request / response handling. - Migrated to the Symfony HttpFoundation component for core request / response handling.
......
...@@ -39,6 +39,10 @@ All views are stored within the **application/views** directory and use the PHP ...@@ -39,6 +39,10 @@ All views are stored within the **application/views** directory and use the PHP
return View::make('home.index'); return View::make('home.index');
}); });
#### Determining if a view exists:
$exists = View::exists('home.index');
Sometimes you will need a little more control over the response sent to the browser. For example, you may need to set a custom header on the response, or change the HTTP status code. Here's how: Sometimes you will need a little more control over the response sent to the browser. For example, you may need to set a custom header on the response, or change the HTTP status code. Here's how:
#### Returning a custom response: #### Returning a custom response:
......
...@@ -5,7 +5,7 @@ class Memcached { ...@@ -5,7 +5,7 @@ class Memcached {
/** /**
* The Memcached connection instance. * The Memcached connection instance.
* *
* @var Memcache * @var Memcached
*/ */
protected static $connection; protected static $connection;
...@@ -40,11 +40,11 @@ class Memcached { ...@@ -40,11 +40,11 @@ class Memcached {
*/ */
protected static function connect($servers) protected static function connect($servers)
{ {
$memcache = new \Memcache; $memcache = new \Memcached;
foreach ($servers as $server) foreach ($servers as $server)
{ {
$memcache->addServer($server['host'], $server['port'], true, $server['weight']); $memcache->addServer($server['host'], $server['port'], $server['weight']);
} }
if ($memcache->getVersion() === false) if ($memcache->getVersion() === false)
......
...@@ -110,12 +110,13 @@ class View implements ArrayAccess { ...@@ -110,12 +110,13 @@ class View implements ArrayAccess {
} }
/** /**
* Get the path to a given view on disk. * Determine if the given view exists.
* *
* @param string $view * @param string $view
* @return string * @param boolean $return_path
* @return string|bool
*/ */
protected function path($view) public static function exists($view, $return_path = false)
{ {
list($bundle, $view) = Bundle::parse($view); list($bundle, $view) = Bundle::parse($view);
...@@ -127,6 +128,22 @@ class View implements ArrayAccess { ...@@ -127,6 +128,22 @@ class View implements ArrayAccess {
$path = Event::first(static::loader, array($bundle, $view)); $path = Event::first(static::loader, array($bundle, $view));
if ( ! is_null($path)) if ( ! is_null($path))
{
return $return_path ? $path : true;
}
return false;
}
/**
* Get the path to a given view on disk.
*
* @param string $view
* @return string
*/
protected function path($view)
{
if ($path = $this->exists($view,true))
{ {
return $path; return $path;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment