Tôi nghĩ rằng một cách tiếp cận tốt hơn sẽ không sử dụng các kịch bản trong trường hợp này. Mã tiếp theo trong các quy tắc chỉ nói lên kịch bản: các trường tiếp theo là bắt buộc. Nhưng không: bỏ qua người khác.
array('name, username, email', 'required', 'on' => 'update'),
Ví dụ, nếu chúng ta giới hạn độ dài của mật khẩu lên đến 32 ký tự, nhưng trong một cơ sở dữ liệu được lưu trữ trong một sha1 định dạng (chiều dài 40), sau đó chúng tôi có một vấn đề bởi vì các validator sẽ chặn các cơ sở dữ liệu query.Điều này là bởi vì khi bạn cập nhật, phương thức "validatе" kiểm tra tất cả các thuộc tính lớp (liên quan đến ánh xạ bảng cơ sở dữ liệu), không chỉ các thuộc tính mới được gửi qua bài đăng.
Có thể sử dụng phương thức "saveAttributes", nhưng sau đó tôi nhận thấy một vấn đề khác. Nếu cột "email" là duy nhất trong cơ sở dữ liệu và trong trường hợp email đã chỉnh sửa trùng lặp một trong số hiện có, thì hệ thống thư Yii được xác định trong quy tắc không thể thông báo và ném mã lỗi liên quan đến truy vấn cơ sở dữ liệu.
Cách tiếp cận dễ nhất tôi nghĩ là: không đặt viễn cảnh trong trường hợp này. Chỉ cần gửi như một đối số các thuộc tính mà bạn muốn. Điều này sẽ giữ cho tất cả các tính năng CRUD được tạo bởi GII.
Trong code của bạn nó trông như thế này: (trong mô hình)
public function rules() {
return array(
array('name, username, email, password', 'required'),
);
}
(trong điều khiển)
if($id==Yii::app()->user->id){
$model=$this->loadModel($id);
if(isset($_POST['JbJsJobResume'])) {
$model->attributes=$_POST['JbJsJobResume'];
if($model->save(true, array('name', 'username', 'email')))
$this->redirect(array('view','id'=>$model->id));
}
$this->render('update',array('model'=>$model,));
}
tôi nhận thấy rằng bạn không sử dụng RBAC. Nó rất tiện lợi và linh hoạt - hãy thử nó.
http://www.yiiframework.com/doc/guide/1.1/en/topics.auth#role-based-access-control
Cảm ơn bạn đã giúp đỡ ur.but này không hoạt động –
nếu bạn làm theo các tùy chọn kịch bản sau đó cho hành động mà bạn chạy ngay bây giờ, bạn phải đặt kịch bản ngay sau khi tải mô hình $. Bằng cách loại bỏ trường mật khẩu khỏi khung nhìn, việc xác thực sẽ không yêu cầu thuộc tính này. Vui lòng chỉ định lỗi của bạn để có ý tưởng tốt hơn về sự cố của bạn. –
u có thể giải thích cho tôi breifly ?? –