Commit 122f3abd authored by 尘缘's avatar 尘缘

Merge pull request #2 from laravel/master

merge
parents f742cc32 6a1d203b
...@@ -46,9 +46,9 @@ return array( ...@@ -46,9 +46,9 @@ return array(
"ip" => "The :attribute must be a valid IP address.", "ip" => "The :attribute must be a valid IP address.",
"match" => "The :attribute format is invalid.", "match" => "The :attribute format is invalid.",
"max" => array( "max" => array(
"numeric" => "The :attribute must be less than :max.", "numeric" => "The :attribute may not be greater than :max.",
"file" => "The :attribute must be less than :max kilobytes.", "file" => "The :attribute may not be greater than :max kilobytes.",
"string" => "The :attribute must be less than :max characters.", "string" => "The :attribute may not be greater than :max characters.",
), ),
"mimes" => "The :attribute must be a file of type: :values.", "mimes" => "The :attribute must be a file of type: :values.",
"min" => array( "min" => array(
......
...@@ -27,6 +27,7 @@ return array( ...@@ -27,6 +27,7 @@ return array(
"countbetween" => ":attribute moet tussen :min en :max geselecteerde elementen bevatten.", "countbetween" => ":attribute moet tussen :min en :max geselecteerde elementen bevatten.",
"countmax" => ":attribute moet minder dan :max geselecteerde elementen bevatten.", "countmax" => ":attribute moet minder dan :max geselecteerde elementen bevatten.",
"countmin" => ":attribute moet minimaal :min geselecteerde elementen bevatten.", "countmin" => ":attribute moet minimaal :min geselecteerde elementen bevatten.",
"date_format" => ":attribute moet een geldig datum formaat bevatten.",
"different" => ":attribute en :other moeten verschillend zijn.", "different" => ":attribute en :other moeten verschillend zijn.",
"email" => ":attribute is geen geldig e-mailadres.", "email" => ":attribute is geen geldig e-mailadres.",
"exists" => ":attribute bestaat niet.", "exists" => ":attribute bestaat niet.",
...@@ -49,6 +50,7 @@ return array( ...@@ -49,6 +50,7 @@ return array(
"not_in" => "Het formaat van :attribute is ongeldig.", "not_in" => "Het formaat van :attribute is ongeldig.",
"numeric" => ":attribute moet een nummer zijn.", "numeric" => ":attribute moet een nummer zijn.",
"required" => ":attribute is verplicht.", "required" => ":attribute is verplicht.",
"required_with" => ":attribute is verplicht i.c.m. :field",
"same" => ":attribute en :other moeten overeenkomen.", "same" => ":attribute en :other moeten overeenkomen.",
"size" => array( "size" => array(
"numeric" => ":attribute moet :size zijn.", "numeric" => ":attribute moet :size zijn.",
......
...@@ -38,16 +38,16 @@ return array( ...@@ -38,16 +38,16 @@ return array(
"countmin" => "The :attribute must have at least :min selected elements.", "countmin" => "The :attribute must have at least :min selected elements.",
"different" => "Поля :attribute и :other должны различаться.", "different" => "Поля :attribute и :other должны различаться.",
"email" => "Поле :attribute имеет неверный формат.", "email" => "Поле :attribute имеет неверный формат.",
"exists" => "Выбранное значение для :attribute уже существует.", "exists" => "Выбранное значение для :attribute не верно.",
"image" => "Поле :attribute должно быть картинкой.", "image" => "Поле :attribute должно быть картинкой.",
"in" => "Выбранное значение для :attribute не верно.", "in" => "Выбранное значение для :attribute не верно.",
"integer" => "Поле :attribute должно быть целым числом.", "integer" => "Поле :attribute должно быть целым числом.",
"ip" => "Поле :attribute должно быть полным IP-адресом.", "ip" => "Поле :attribute должно быть полным IP-адресом.",
"match" => "Поле :attribute имеет неверный формат.", "match" => "Поле :attribute имеет неверный формат.",
"max" => array( "max" => array(
"numeric" => "Поле :attribute должно быть меньше :max.", "numeric" => "Поле :attribute должно быть не больше :max.",
"file" => "Поле :attribute должно быть меньше :max Килобайт.", "file" => "Поле :attribute должно быть не больше :max Килобайт.",
"string" => "Поле :attribute должно быть короче :max символов.", "string" => "Поле :attribute должно быть не длиннее :max символов.",
), ),
"mimes" => "Поле :attribute должно быть файлом одного из типов: :values.", "mimes" => "Поле :attribute должно быть файлом одного из типов: :values.",
"min" => array( "min" => array(
......
...@@ -200,7 +200,7 @@ class Migrator extends Task { ...@@ -200,7 +200,7 @@ class Migrator extends Task {
$table->primary(array('bundle', 'name')); $table->primary(array('bundle', 'name'));
}); });
echo "Migration table created successfully."; echo "Migration table created successfully.".PHP_EOL;
} }
/** /**
......
...@@ -88,7 +88,8 @@ class Runner extends Task { ...@@ -88,7 +88,8 @@ class Runner extends Task {
// strings with spaces inside should be wrapped in quotes. // strings with spaces inside should be wrapped in quotes.
$esc_path = escapeshellarg($path); $esc_path = escapeshellarg($path);
passthru('LARAVEL_ENV='.Request::env().' phpunit --configuration '.$esc_path, $status); putenv('LARAVEL_ENV='.Request::env());
passthru('phpunit --configuration '.$esc_path, $status);
@unlink($path); @unlink($path);
......
...@@ -154,8 +154,12 @@ if (magic_quotes()) ...@@ -154,8 +154,12 @@ if (magic_quotes())
use Symfony\Component\HttpFoundation\LaravelRequest as RequestFoundation; use Symfony\Component\HttpFoundation\LaravelRequest as RequestFoundation;
RequestFoundation::enableHttpMethodParameterOverride();
Request::$foundation = RequestFoundation::createFromGlobals(); Request::$foundation = RequestFoundation::createFromGlobals();
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
| Determine The Application Environment | Determine The Application Environment
......
...@@ -116,7 +116,7 @@ class Crypter { ...@@ -116,7 +116,7 @@ class Crypter {
*/ */
protected static function pad($value) protected static function pad($value)
{ {
$pad = static::$block - (Str::length($value) % static::$block); $pad = static::$block - (strlen($value) % static::$block);
return $value .= str_repeat(chr($pad), $pad); return $value .= str_repeat(chr($pad), $pad);
} }
...@@ -128,15 +128,8 @@ class Crypter { ...@@ -128,15 +128,8 @@ class Crypter {
* @return string * @return string
*/ */
protected static function unpad($value) protected static function unpad($value)
{
if (MB_STRING)
{
$pad = ord(mb_substr($value, -1, 1, Config::get('application.encoding')));
}
else
{ {
$pad = ord(substr($value, -1)); $pad = ord(substr($value, -1));
}
if ($pad and $pad <= static::$block) if ($pad and $pad <= static::$block)
{ {
...@@ -145,12 +138,7 @@ class Crypter { ...@@ -145,12 +138,7 @@ class Crypter {
// as the padding appears to have been changed. // as the padding appears to have been changed.
if (preg_match('/'.chr($pad).'{'.$pad.'}$/', $value)) if (preg_match('/'.chr($pad).'{'.$pad.'}$/', $value))
{ {
if (MB_STRING) return substr($value, 0, strlen($value) - $pad);
{
return mb_substr($value, 0, Str::length($value) - $pad, Config::get('application.encoding'));
}
return substr($value, 0, Str::length($value) - $pad);
} }
// If the padding characters do not match the expected padding // If the padding characters do not match the expected padding
......
...@@ -197,7 +197,7 @@ class Connection { ...@@ -197,7 +197,7 @@ class Connection {
// For insert statements that use the "returning" clause, which is allowed // For insert statements that use the "returning" clause, which is allowed
// by database systems such as Postgres, we need to actually return the // by database systems such as Postgres, we need to actually return the
// real query result so the consumer can get the ID. // real query result so the consumer can get the ID.
elseif (stripos($sql, 'insert') === 0 and stripos($sql, 'returning') !== false) elseif (stripos($sql, 'insert') === 0 and stripos($sql, ') returning') !== false)
{ {
return $this->fetch($statement, Config::get('database.fetch')); return $this->fetch($statement, Config::get('database.fetch'));
} }
......
...@@ -335,7 +335,7 @@ abstract class Model { ...@@ -335,7 +335,7 @@ abstract class Model {
*/ */
public function push() public function push()
{ {
$this->save(); if (!$this->save()) return false;
// To sync all of the relationships to the database, we will simply spin through // To sync all of the relationships to the database, we will simply spin through
// the relationships, calling the "push" method on each of the models in that // the relationships, calling the "push" method on each of the models in that
...@@ -349,9 +349,11 @@ abstract class Model { ...@@ -349,9 +349,11 @@ abstract class Model {
foreach ($models as $model) foreach ($models as $model)
{ {
$model->push(); if (!$model->push()) return false;
} }
} }
return true;
} }
/** /**
...@@ -441,7 +443,7 @@ abstract class Model { ...@@ -441,7 +443,7 @@ abstract class Model {
} }
/** /**
*Updates the timestamp on the model and immediately saves it. * Updates the timestamp on the model and immediately saves it.
* *
* @return void * @return void
*/ */
...@@ -562,11 +564,12 @@ abstract class Model { ...@@ -562,11 +564,12 @@ abstract class Model {
* *
* @param string $key * @param string $key
* @param mixed $value * @param mixed $value
* @return void * @return Model
*/ */
public function set_attribute($key, $value) public function set_attribute($key, $value)
{ {
$this->attributes[$key] = $value; $this->attributes[$key] = $value;
return $this;
} }
/** /**
...@@ -769,7 +772,7 @@ abstract class Model { ...@@ -769,7 +772,7 @@ abstract class Model {
} }
elseif (starts_with($method, 'set_')) elseif (starts_with($method, 'set_'))
{ {
$this->set_attribute(substr($method, 4), $parameters[0]); return $this->set_attribute(substr($method, 4), $parameters[0]);
} }
// Finally we will assume that the method is actually the beginning of a // Finally we will assume that the method is actually the beginning of a
......
...@@ -110,7 +110,7 @@ class Belongs_To extends Relationship { ...@@ -110,7 +110,7 @@ class Belongs_To extends Relationship {
*/ */
public function foreign_value() public function foreign_value()
{ {
return $this->base->get_attribute($this->foreign); return $this->base->{$this->foreign};
} }
/** /**
......
...@@ -160,6 +160,8 @@ class Input { ...@@ -160,6 +160,8 @@ class Input {
*/ */
public static function had($key) public static function had($key)
{ {
if (is_array(static::old($key))) return true;
return trim((string) static::old($key)) !== ''; return trim((string) static::old($key)) !== '';
} }
......
...@@ -202,9 +202,14 @@ class Response { ...@@ -202,9 +202,14 @@ class Response {
// off to the HttpFoundation and let it create the header text. // off to the HttpFoundation and let it create the header text.
$response = new static(File::get($path), 200, $headers); $response = new static(File::get($path), 200, $headers);
// If the Content-Disposition header has already been set by the
// merge above, then do not override it with out generated one.
if (!isset($headers['Content-Disposition'])) {
$d = $response->disposition($name); $d = $response->disposition($name);
$response = $response->header('Content-Disposition', $d);
}
return $response->header('Content-Disposition', $d); return $response;
} }
/** /**
......
...@@ -133,6 +133,19 @@ class EloquentTest extends PHPUnit_Framework_TestCase { ...@@ -133,6 +133,19 @@ class EloquentTest extends PHPUnit_Framework_TestCase {
Model::$accessible = null; Model::$accessible = null;
} }
/**
* Test the Model::__set method allows chaining.
*
* @group laravel
*/
public function testAttributeMagicSetterMethodAllowsChaining()
{
$model = new Model;
$this->assertInstanceOf('Model', $model->set_foo('foo'));
$model->set_bar('bar')->set_baz('baz');
$this->assertEquals(array('foo' => 'foo', 'bar' => 'bar', 'baz' => 'baz'), $model->to_array());
}
/** /**
* Test the Model::__get method. * Test the Model::__get method.
* *
......
...@@ -355,6 +355,8 @@ class URL { ...@@ -355,6 +355,8 @@ class URL {
*/ */
public static function valid($url) public static function valid($url)
{ {
if (starts_with($url, '//')) return true;
return filter_var($url, FILTER_VALIDATE_URL) !== false; return filter_var($url, FILTER_VALIDATE_URL) !== false;
} }
......
# Apache configuration file # Apache configuration file
# http://httpd.apache.org/docs/2.2/mod/quickreference.html # http://httpd.apache.org/docs/current/mod/quickreference.html
# Note: ".htaccess" files are an overhead for each request. This logic should # Note: ".htaccess" files are an overhead for each request. This logic should
# be placed in your Apache config whenever possible. # be placed in your Apache config whenever possible.
# http://httpd.apache.org/docs/2.2/howto/htaccess.html # http://httpd.apache.org/docs/current/howto/htaccess.html
# Turning on the rewrite engine is necessary for the following rules and # Turning on the rewrite engine is necessary for the following rules and
# features. "+FollowSymLinks" must be enabled for this to work symbolically. # features. "+FollowSymLinks" must be enabled for this to work symbolically.
......
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